0

基本的に、単一のフォームを使用して、ネストされた同じ属性オブジェクトの複数のインスタンスを設定したいと考えています。これは可能ですか?

私は持っている:

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

params には最後の fields_for エントリのみが入力されます。ネストされた属性の複数のインスタンスをインスタンス化できるフォームを作成する適切な方法は何ですか?

4

1 に答える 1

-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 %>
于 2013-08-19T03:47:23.433 に答える