I have just jumped into has_many :through
association. I\'m trying to implement the ability to save data for all 3 tables (Physician
, Patient
Ok, this little bugger of a question stumped me for a few hours, so I'm going to post my working solution on here in hopes it shaves some time for peeps. This is for Rails 4.0 and Ruby 2.0. This also overcame a "symbol to integer conversion" issue I had.
Models:
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, :through: :appointments
accepts_nested_attributes_for :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
accepts_nested_attributes_for :physician
end
class Physicians < ActiveRecord::Base
has_many :appointments
has_many :patients, through: :appointments
end
Controller:
def new
@patient= Patient.new
@appointments = @patient.appointments.build
@physician = @appointments.build_physician
end
def create
Patient.new(patient_params)
end
def patient_params
params.require(:patient).permit(:id, appointments_attributes: [:id, :appointment_time, physician_attributes: [:id ] )
end
View
<% form_for(@patient) do |patient_form| %>
<%= patient_form.error_messages %>
<%= patient_form.label :name, "Patient Name" %>
<%= patient_form.text_field :name %>
<% patient_form.fields_for :appointments do |appointment_form| %>
<%= appointment_form.label :appointment_date, "Appointment Date" %>
<%= appointment_form.date_field :appointment_date %>
<% appointment_form.fields_for :physician do |physician_form| %>
<%= physician_form.label :name, "Physician Name" %>
<%= physician_form.text_field :name %>
<% end %>
<% end %>
<%= patient_form.submit 'Create' %>
<% end %>
<%= link_to 'Back', patients_path %>