对于has_many关系的Rails fields_for参数不会在params中生成数组

时间:2012-03-23 20:19:24

标签: ruby-on-rails has-many fields-for

我有一个型号传感器,与另一个型号Watch有has_manyaccepts_nested_attributes_for关系。在更新传感器的表单中,我有以下内容

<%= sensor_form.fields_for :watches do |watches_form| %>
   <%= watches_form.label :label %><br />
   <%= watches_form.text_field :label %>
<% end %>

这是为了允许编辑属于传感器的已创建的手表。

此调用以如下形式输出表单输入:

<input name="sensor[watches_attributes][0][label]" ... />
<input name="sensor[watches_attributes][0][id]" ... />

提交后,Sensor控制器中的params对象会获得类似

的关联
"sensor" => {
  "id"=>"1",
   "watches_attributes"=> { 
     "0"=>{"id" => "1", "label" => "foo"},
     "1"=>{"id" => "2", "label" => "bar"}
   }
}

要使has_manyaccepts_nested_attributes_for更新适用于@sensor.update_attributes调用,似乎该属性键必须映射到数组。

从我在示例中看到的情况来看,has_manyaccepts_nested_attributes_forsensor_form.fields_for的组合应该允许我将生成的params对象直接传递给{ {1}}并按预期更新每个相关对象。相反传感器发生,没有错误,但Watch对象没有更新(因为@sensor.update_attributes映射到Hash而不是数组?)我错过了什么?

1 个答案:

答案 0 :(得分:0)

从rails 3你还需要添加

attr_accessible :watches_attributes

到传感器类