ガラシのパルプンテ頼み

地方産限界エンジニアのグローバル独り言

【5分くらいでわかる】ActiveRecordのdependentオプションについて | Rails入門

dependentとは

  • 親オブジェクトがdestroyされたとき、関連する子オブジェクトの扱いを制御するオプション

dependentオプションの種類

destroy

  • 親オブジェクトが削除されたら子オブジェクトも削除される
  • ActiveRecordを介して削除(コールバック処理が実行される)
  • クエリが親に紐づいている子の数だけ実行される
class User < ActiveRecord::Base
  has_many :posts, dependent: :destroy
end

delete

  • 親オブジェクトが削除されたら子オブジェクトも削除される
  • SQLを直実行して削除(コールバック処理は実行されない)
class User < ActiveRecord::Base
  has_many :posts, dependent: :delete
end

delete_all

  • 親オブジェクトが削除されたら関連する子オブジェクトを全て削除する
  • SQLを直実行して削除(コールバック処理は実行されない)
class User < ActiveRecord::Base
  has_many :posts, dependent: :delete_all
end

nullify

  • 親オブジェクトのみが削除されて子オブジェクトをnilに更新する
class User < ActiveRecord::Base
  has_many :posts, dependent: :nullify
end

参考記事

railsguides.jp