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

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.
   3. <p>
   4. <%= label :patient_visit , :complaints , "Complaints:" %>
   5. <%= form.text_area :complaints , :size => 20 %>
   6. </p>
   7.
   8. <p>
   9. <%= label :patient_visit , :systemic_history , "Systemic
History:" %>
  10. <%= form.text_field :systemic_history , :size => 40 %>
  11. </p>
  12.
  13. <p>
  14. <%= label :patient_visit , :opthal_history , "Opthal
History:" %>
  15. <%= form.text_field :opthal_history , :size => 40 %>
  16. </p>
  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 )

Use the flash object to transfer data between controller actions.

Regards,
Mukund

... 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.

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)

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