2

accepts_nested_attributes_forActiveRecord でnewを使用する場合、 オプション を使用できます:allow_destroy => true{"_delete"=>"1", "id"=>"..."}このオプションが設定されている場合、渡されたようなネストされた属性を含むハッシュはupdate_attributes、ネストされたオブジェクトを削除します。

簡単なセットアップ:

class Forum < ActiveRecord::Base
  has_many :users
  accepts_nested_attributes_for :users, :allow_destroy => true
end

class User < ActiveRecord::Base
  belongs_to :forum
end

Forum.first.update_attributes("users_attributes"=>{"0"=>{"_delete"=>"1", "id"=>"42"}})

質問:ネストされたオブジェクトを削除する代わりに、関連付けを削除するにはどうすればよい"_delete" => "1"ですか? (つまり、上記の場合、ユーザーの forum_id を nil に設定します)

おまけの質問:関連付けを削除するときに、ネストされたオブジェクトの属性も変更したい場合はどうすればよいですか? (状態やタイムスタンプの設定など)

4

1 に答える 1

2

を使用してユーザーを削除するよう求める代わりに"_delete" => '1'、nested_attributes を使用して更新することはできませんか?:

Forum.first.update_attributes("users_attributes"=> { 
  "0" => {
    "id" => "42",
    "forum_id" => "",
    "state" => 'removed'
  }
})
于 2009-08-19T13:41:24.337 に答える