Rails 3.2 fields_for添加而不是更新记录

时间:2015-04-20 14:42:22

标签: ruby-on-rails

我有一个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 %>

感谢您的帮助!

1 个答案:

答案 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,因此会创建一个新记录而不是更新资源。