バックエンド:別のモデル(ContactPreference)のhas_manyというモデル(User)があります。 フロントエンド:ユーザーが特定のユーザーの連絡先設定を並べ替え、追加、削除できるようにするインターフェイス。Rails 3フォームデータからネストされた属性を再構築する
私は、ユーザーが1回のフォーム送信ですべての変更を一度にコミットするようにしたいと思います。私がこれをやっているところは、Userモデルのallows_nested_attributes_for :contact_preferences
であり、編集された設定リストの属性を簡単にポストしています。それはうれしいバグを除いてうまくいきます:ユーザがコンタクトプリファレンスを削除した場合、IDは単に送信されず、プリファレンスはDBから削除されません。
allows_nested_attributes_for
は、コレクションからオブジェクトを削除する機能をサポートしていますが、クライアントは削除されたIDを追跡し、'_destroy' => 1
パラメータを渡す必要があります。これは私がむしろ避けるだろう厄介なロジックです。オブジェクトに明示的に含まれていない限り、オブジェクトを削除したいだけです。 allows_nested_attributes_for
は私が知る限りこの動作をサポートしていないので、私自身のソリューションを実装しようとしています。
この種の更新を行う最も効率的な方法(データベースアクセスの点で)は何ですか?すべてを削除してリストをゼロから再構築しますか?アソシエーションをロードし、明示的に含まれていないオブジェクトを選択しますか?おそらく、私が使うことができる巧妙なActiveRecordの魔法がありますか?