2

私が学んだように、update_onlyはhas_manyアソシエーションでは機能しません。

ネストされた属性を更新していますが、毎回新しい子が作成され、古い子は削除されません。更新のたびにそれらを自動的に削除する(has_oneで機能する:update_onlyの動作を模倣する)ための良い方法は何でしょうか?

私は:allow_destroyについて知っています。ただし、何を破棄する必要があるかをレールに通知するための子IDはありません。

PS私はもともと2012年にこの質問をしましたが、当時、assign_nested_attributes_for_collection_associationをオーバーライドするためのハッキーな解決策を見つけました。この問題を解決するためにRailsに何かが導入されたのではないかと思います。これは非常に一般的な単純なケースのように見えます。なぜそれに対する組み込みの解決策があるのだろうか。

4

2 に答える 2

1

私が見つけた最良のアプローチは、オブジェクトのメソッド assign_nested_attributes_for_collection_association をオーバーライドし、そこで関連付けタイプを確認することです。has_many の場合は、この関連付けで destroy_all を実行します。

このようなコードは、一般化してモジュールに移動し、さらに再利用することができます。

于 2012-07-17T18:51:30.803 に答える
0

これらの2つの質問で言及されている町には、より良い解決策があるようです:

解決策は

def foo_attributes=(*attrs)
  self.foo.clear
  super(*attrs)
end
于 2016-01-04T20:57:10.893 に答える