我的模型设置如下:
调用.rb
belongs_to :contact
联系人.rb
has_many :calls
belongs_to :postal_address, class_name: "Address", foreign_key: "postal_address_id"
belongs_to :physical_address, class_name: "Address", foreign_key: "physical_address_id"
地址.rb
has_many :contacts
在我的联系新/编辑表单上,我使用@contact.build_postal_address
和@contact.build_physical_address
在ContactsController
其中按预期行事。如果需要,呈现的视图会显示邮政地址和实际地址的空白字段。
记录通话时,会在通话期间弹出一个表格。此表单上的嵌套资源之一允许操作员从与输入有关呼叫的其他信息相同的页面编辑联系人详细信息。对于这种形式,其中contact
是嵌套形式的一部分,构建功能不起作用。
我使用的表格ContactsController
如下:
_contact_form.html.erb
<%= simple_form_for @contact do |f| %>
<%= f.input :name %>
<%= render 'address_fields', f: f, fields: :postal %>
<%= render 'address_fields', f: f, fields: :physical %>
<%= f.submit %>
<% end %>
_address_fields.html.erb
<%= f.simple_fields_for fields do |a| %>
<%= a.input :address_line_1 %>
<% end %>
我在中使用的表格CallsController
如下(重新使用_address_fields
部分:)
_call_form.html.erb
<%= simple_nested_form_for @call do |f| %>
<%= f.input :call_comments %>
<%= f.simple_fields_for :contact do |contact| %>
<%= contact.input :name %>
<%= render 'address_fields', f: contact, fields: :postal %>
<%= render 'address_fields', f: contact, fields: :physical %>
<% end %>
<%= f.submit %>
<% end %>
无论我用控制器做什么@contact.build_physical_address
或@contact.build_postal_address
在控制器中做什么,邮政和实际地址字段都不会出现在呼叫表单中,除非该地址已经存在于联系人下。如果地址已经存在,则build_*
在邮政/物理上调用操作也不会清除这些字段。