Rails 3:为什么空的嵌套表单会生成隐藏的输入字段?

Mis*_*hko 1 ruby-on-rails hidden-field nested-forms ruby-on-rails-3

为什么这个:

# edit.html.erb
<%= form_for @product do |f| %>
  <%= f.fields_for :shop do |sf| %>
    # Nothing here
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

生成隐藏的输入字段:

<input type="hidden" value="23" name="product[shop_attributes][id]" id="product_shop_attributes_id">
Run Code Online (Sandbox Code Playgroud)

相关控制器代码:

def edit
  @product = Product.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

idl*_*ers 6

这是因为你正在编辑的@product有一个商店.Rails已将其插入fields_for中,以便在提交表单时,它知道这些嵌套属性适用于哪个商店.它是默认的嵌套属性行为.