假设我有一个具有多个地址的Person模型。如果在控制器中我做了3次{@person.addresses.build},下面的代码应该为地址生成3组text_fields吗?出于某种原因,我只获得1个地址格式,无论我在控制器中构建了多少个地址。我正在使用Rails 3.0
<%= form_for @person do |person_form| %>
<%= person_form.fields_for :addresses do |address_fields| %>
Street : <%= address_fields.text_field :street %>
<% end %>
<% end %>
答案 0 :(得分:1)
您可以将fields_for块包装在每个循环中,并将每个实例作为参数传递给fields_for。例如:
<%= form_for @person do |person_form| %>
<% @person.addresses.each do |address| %>
<%= person_form.fields_for :addresses, address do |address_fields| %>
Street : <%= address_fields.text_field :street %>
<% end %>
<% end %>
<% end %>
或者,您可以将集合作为参数传递给fields_for并让它自动迭代:
<%= form_for @person do |person_form| %>
<%= person_form.fields_for :addresses, @person.addresses do |address_fields| %>
Street : <%= address_fields.text_field :street %>
<% end %>
<% end %>
请参阅http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for
答案 1 :(得分:1)
表格看起来不错。根据文档(ri fields_for
),您需要在Person模型中同时拥有addresses
reader和writer方法。您已经拥有了reader方法(因为您声明Person has_many:addresses),所以现在您需要编写方法 - 您可以“手动”创建它(def addresses_attributes=(...)
)或让accepts_nested_attributes_for
定义作家为你。
答案 2 :(得分:0)
首先,您的accepts_nested_attributes_for :addresses
模型中需要Person
。其次,使用build
实际上只是构建而不是保存记录。如果你想保留这个例子,继续这样的事情:
3.times { @person.addresses.create }