如何在表单中创建嵌套属性的多个实例

时间:2013-08-19 03:43:53

标签: ruby-on-rails ruby-on-rails-3 nested-attributes

基本上我想使用单个表单填充同一嵌套属性对象的多个实例。这可能吗?

我有:

class Parent < ActiveRecord::Base
  has_many :childs
  acceptes_nested_attributes_for :childs
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

然后是parents / new.html.erb的视图

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %>
  // basic fields for parent
  <%= f.fields_for :child do |ff| %>
    <%= ff.title %>
  <% end %>
<% end %> 

工作正常,但如果我想做的事情如下:

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %>
  // basic fields for parent
  <%= f.fields_for :child do |ff| %>
    <%= ff.title %>
  <% end %>
  <%= f.fields_for :child do |ff| %>
    <%= ff.title %>
  <% end %>
<% end %> 

它只用最后的fields_for条目填充参数。创建允许实例化嵌套属性的多个实例的表单的正确方法是什么?

1 个答案:

答案 0 :(得分:-1)

更好的方法是执行控制器操作:

def new
  @parent = Parent.find(1)

  # Build 2 children
  2.times do 
    @parent.children.build
  end
end

然后在你看来:

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %>
  // basic fields for parent
  <%= f.fields_for :children do |ff| %>
    <%= ff.title %>
  <% end %>
<% end %>

更新:

不是真的回答这个问题,而是建议根据Rails惯例进行一些更改。由于"child".pluralize会返回子项,因此我认为应该更新模型以使用has_many :children,以便正确解析类名"child".pluralize.classify

class Parent < ActiveRecord::Base
  has_many :children
  acceptes_nested_attributes_for :children
end

视图中相应的变化:

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %>
  // basic fields for parent
  <%= f.fields_for :children do |ff| %>
    <%= ff.title %>
  <% end %>
<% end %>