说我有以下多态关联:
class EmailAddress < ActiveRecord::Base
belongs_to :emailable, polymorphic: true
end
class Person < ActiveRecord::Base
has_many :email_addresses, as: :emailable, dependent: :destroy
accepts_nested_attributes_for :email_addresses
end
class Organization < ActiveRecord::Base
has_many :email_addresses, as: :emailable, dependent: :destroy
accepts_nested_attributes_for :email_addresses
end
我正在使用nested_form
gem来帮助构建动态嵌套表单,其中可以在编辑个人或组织时添加/删除多个电子邮件地址。 Ryan's documentation(针对此示例进行了修改)声明如果您使用<%= f.fields_for :email_addresses %>
,那么“它将查找部分名为”email_address_fields“并将表单构建器作为f变量传递给它。”
这很方便,但就我而言,电子邮件地址字段部分对于人员和组织来说都是完全相同的。有没有一种方法可以告诉/app/views/people/_email_address_fields.html.erb
方法使用不同的部分(例如,在/app/views/organizations/_email_address_fields.html.erb
或类似的东西中创建的部分),而不是同时使用f.fields_for
和/app/views/email_addresses/_fields.html/erb
?
我想到了以下内容:
<%= f.fields_for :email_addresses do |email_address_form| %>
<%= render partial: 'email_addresses/fields', locals: { f: email_address_form } %>
<% end %>
有没有更好的方法?
答案 0 :(得分:1)
不,我不相信有更好的方法,尽管你可以制作一个帮助方法,如果你真的想要删除重复。我们对嵌套链接表单使用完全相同的策略:
<%= f.fields_for :links do |link_form| %>
<%= render partial: "shared/link_fields", locals: { f: link_form } %>
<% end %>