nested_attributes_forで削除予定のレコードを検知する方法

f:id:ihatov08:20160914210801j:plain
nested_attributes_forで削除予定のレコードを検知する方法です。

nested_attributes_forを使うと親レコードにひもづく子レコードを、すっきりしたコードで記述、insertすることができます。

今回フォームに回答があった場合は、フォームに紐づくパーツを変更不可にするvalidationを組んでみました。

フォームに紐づくパーツの変更をどうやって検知するかですが,marked_for_destruction?を使うと検知できます。

member.avatar_attributes = { id: '2', _destroy: '1' }
member.avatar.marked_for_destruction? # => true
member.save
member.reload.avatar # => nil

実際は

parts.any?(&:marked_for_destruction?) || parts.any?(&:changed?)

みたいな感じで書けば、削除される予定か?変更予定か?を調べることができます。

Rails便利。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です