関連するコレクションに新しいアイテムを追加すると、結果の変更を確認するために foo.reload を呼び出す必要がないことがわかりました (スクリプト/コンソールでうろついています)。
foo.bars
=> []
foo.bars_attributes = [{ :person_id => '288', :task_id => '1237' }]
=> [{ :person_id=>"288", :task_id=>"1237" }]
foo.save
=> true
foo.bars
=> [#<Bar id: 6, person_id: 288, task_id => 1237>]
素晴らしい。しかし、コレクションからアイテムを削除する場合、コレクションに変更が反映される前に foo.reload を呼び出す必要があります (save の呼び出し後に DB に表示されます)。
foo.bars_attributes = [{ :id => '6', :_delete => '1' }]
= [{ :_delete=>"1", :id=>"6" }]
foo.save
=> true
foo.bars
=> [#<Bar id: 6, person_id: 288, task_id => 1237>]
foo.reload
foo.bars
=> []
これは正常ですか、それとも関連付けの更新で少し間違ったことをしていますか?