有没有办法在使用nested_form gem时指定不同的部分?

时间:2014-02-09 04:57:33

标签: ruby-on-rails nested-forms partials

说我有以下多态关联:

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

有没有更好的方法?

1 个答案:

答案 0 :(得分:1)

不,我不相信有更好的方法,尽管你可以制作一个帮助方法,如果你真的想要删除重复。我们对嵌套链接表单使用完全相同的策略:

<%= f.fields_for :links do |link_form| %>
  <%= render partial: "shared/link_fields", locals: { f: link_form } %>
<% end %>