我刚刚跳到has_many :through
关联。我试图实现通过一个表单保存所有3个表(Physician
,Patient
和关联表)的数据的能力。
我的迁移:
class CreatePhysicians < ActiveRecord::Migration
def self.up
create_table :physicians do |t|
t.string :name
t.timestamps
end
end
end
class CreatePatients < ActiveRecord::Migration
def self.up
create_table :patients do |t|
t.string :name
t.timestamps
end
end
end
class CreateAppointments < ActiveRecord::Migration
def self.up
create_table :appointments do |t|
t.integer :physician_id
t.integer :patient_id
t.date :appointment_date
t.timestamps
end
end
end
我的模特:
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, :through => :appointments
accepts_nested_attributes_for :appointments
accepts_nested_attributes_for :physicians
end
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, :through => :appointments
accepts_nested_attributes_for :patients
accepts_nested_attributes_for :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
end
我的控制器:
def new
@patient = Patient.new
@patient.physicians.build
@patient.appointments.build
end
我的视图(new.html.rb
):
<% form_for(@patient) do |patient_form| %>
<%= patient_form.error_messages %>
<p>
<%= patient_form.label :name, "Patient Name" %>
<%= patient_form.text_field :name %>
</p>
<% patient_form.fields_for :physicians do |physician_form| %>
<p>
<%= physician_form.label :name, "Physician Name" %>
<%= physician_form.text_field :name %>
</p>
<% end %>
<p>
<%= patient_form.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Back', patients_path %>
我可以为Appointment
创建一个新的Patient
,Physician
和相关的记录,但是现在我想在表单中也有appointment_date
的字段。我应该把Appointment
的字段放在哪里?在我的控制器中需要做什么改变?我试着在谷歌上搜索并尝试this,但是在实现它时遇到了一些或其他的错误。
3条答案
按热度按时间gudnpqoy1#
好吧,这个小问题难倒了我几个小时,所以我打算在这里发布我的工作解决方案,希望它能为偷窥者节省一些时间。这是针对Rails 4.0和Ruby 2.0的。这也克服了我遇到的"符号到整数转换"的问题。
agxfikkp2#
“我让它工作了。我只是按如下方式更改了模型”:在上述评论中引用自Shruti
2eafrhcq3#
您的patient类接受医生和预约的嵌套属性。请尝试为预约添加另一个
fields_for
方法。