Passing data from action of cntrlr 1 to action of cntrlr 2


#1

The question is about passing data from action of one controller to
action of another controller.

Inside the new_patient_controller i have the following code when the
button “next” is clicked

def create_visit (created_patient)

redirect_to(:controller=>“patient_visit”,:action=>“index”,:created_patient=>created_patient)
end

This is suppose to call the index view of the “patient_visit” controller
.

Now the “patient_visit” controller has the following form

  1. <% form_for :patient_visit , :url => { :action =>
    :save_patient_visit } do |form| %>
  2. <p>
    
  3.   <%= label :patient_visit , :complaints , "Complaints:"  %>
    
  4.   <%= form.text_area :complaints , :size => 20 %>
    
  5. </p>
    
  6. <p>
    
  7.   <%= label :patient_visit , :systemic_history , "Systemic
    

History:" %>
10. <%= form.text_field :systemic_history , :size => 40 %>
11.


12.
13.


14. <%= label :patient_visit , :opthal_history , “Opthal
History:” %>
15. <%= form.text_field :opthal_history , :size => 40 %>
16.


17.
18. <%= submit_tag “next” , :class => “submit” %>
19.
20. <%end%>

Because of this the params which originally had the value of
“created_patient” now gets overwritten with the new params which has the
value of “:patient_visit” .

I need the created_patient value , cause i need to attach the
patient_visit database entry to the created_patient. ( since one patient
has many visits )


#2

Use the flash object to transfer data between controller actions.

Regards,
Mukund

On Jan 8, 2:01 am, Lance K. removed_email_address@domain.invalid


#3

On 8 Jan., 10:29, Mukund removed_email_address@domain.invalid wrote:

Use the flash object to transfer data between controller actions.

… or just add

, :created_patient => params[:created_patient]

to your form (where you specify the action that is called) so your
param ain’t lost.


#4

Try something like:

def create_visit(for_patient)
# This populates patient_visit.patient_id w/the proper id value
patient_visit = for_patient.visits.new
# Note that I’ve changed the action from index to new–that’s
# the convention for actions that create new objects.
redirect_to(:controller=>“patient_visit”, :action=>“new”)
end

And then in your view, you add:

<%= form.hidden_field(:patient_id) %>

Anyplace inside your form_for block.

That should get you a params[:patient_visit] from which you can create a
visit for a specific patient.

HTH,

-Roy


#5

you can transmit values between controllers in the following ways:

  • parameters to request (if not too long and not compromising
    security)
  • session (recommended to store id, not objects)