0

モデル Sensor と、別のモデル Watchhas_manyとの関係があります。accepts_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]" ... />

これが送信さparamsれると、Sensor コントローラー内のオブジェクトは assoc のようなものを取得します

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

has_many呼び出し時にaccepts_nested_attributes_forupdate が機能するためには@sensor.update_attributes、その属性キーが実際には配列にマップされている必要があるようです。

例で見てきたことから、 、 、およびの組み合わせによりhas_many、結果のオブジェクトを直接渡して、関連する各オブジェクトを意図したとおりに更新できるはずです。代わりに、センサーはエラーなしで実行されますが、Watch オブジェクトは更新されません (配列ではなくハッシュにマップされるため)。accepts_nested_attributes_forsensor_form.fields_forparams@sensor.update_attributes"watches_attributes"

4

1 に答える 1

0

Rails 3から、追加する必要もあります

attr_accessible :watches_attributes

Sensor クラスに

于 2013-09-29T12:56:16.647 に答える