我有一个Rails 3.2应用程序,其中fields_for正在添加新记录而不是更新现有记录。
这是costproject
的模型:
has_many :costestimates, :dependent => :destroy
accepts_nested_attributes_for :costestimates
这是表格的一部分:
<%= simple_form_for @costproject do |f| %>
...
<%= f.fields_for :costestimates do |builder| %>
<fieldset>
<% if builder.object.costproject.maintenance? %>
<% if builder.object.costcat.position.in?([3, 4, 9, 17, 18]) %>
<tr>
<td><%= builder.costcat.position %></td>
<td class="strongnowrap"><%= builder.costcat.category_name %></td>
<td><%= builder.input :amount, label: false, :input_html => {:style => 'width:100px'} %></td>
<% if builder.costcat.categorydesc != nil %>
<td>
<a rel="popover" data-content="<%= builder.costcat.categorydesc %>"><i class="icon-search"></i></a>
</td>
<% else %>
<td></td>
<% end %>
<td><%= builder.input :notes, label: false, :input_html => {:style => 'width:150px', :rows => 1} %></td>
</tr>
<% end %>
<% else %>
<tr>
<td><%= builder.object.costcat.position %></td>
<td class="strongnowrap"><%= builder.object.costcat.category_name %></td>
<td><%= builder.input :amount, label: false, :input_html => {:style => 'width:100px'} %></td>
<% if builder.object.costcat.categorydesc != nil %>
<td>
<a rel="popover" data-content="<%= builder.object.costcat.categorydesc %>"><i class="icon-search"></i></a>
</td>
<% else %>
<td></td>
<% end %>
<td><%= builder.input :notes, label: false, :input_html => {:style => 'width:150px', :rows => 1} %></td>
<td><%= builder.object.id %></td>
</tr>
<% end %>
</fieldset>
<% end %>
感谢您的帮助!
答案 0 :(得分:2)
您必须将要编辑的资源提供给fields_for
方法(作为fields_for
的第二个参数:
<%= f.fields_for :costestimates, @costproject.costestimates do |builder| %>
文档:http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for (搜索&#39;或者要使用的集合&#39;示例)
如果您没有指定要编辑的资源,那么fields_for
将不会包含包含资源ID的hidden_field
,因此会创建一个新记录而不是更新资源。