Railsのdependentオプション

モデルで関連づけの記述をするときに使うdependentオプション。
中でもよく使うのはdestroyだと思う。
destroyもあるがdeleteもあるのでその違いをば。

・deleteとdestroyのちがいは?

とりあえず公式↓
dependentについて:Rails ガイド

delete・・・最小限。SQLを直接打ってるようなもの、指定のデータ1つのみを削除 destroy・・・Activerecordを介して削除する、関連付けられたモデルも削除


dependentオプションの種類:

:destroy:delete:destroy_async:nullify

ex.
親モデル parent has_many :children 子モデル child belongs_to :parent 親オブジェクト(id: 1, name:父さん) 子オブジェクト(id: 1, name:息子, parent_id: 1) があったとする

☆親モデル parent has_many :children, dependent: :delete_allにしたとき、
親モデルdestroyすると子オブジェクトにはなんら影響しない
(id: 1, name:息子, parent_id: 1 のまま)
※nullifyは↑でいうと子オブジェクトのparent_id: NULLになるイメージだが、NOTNULL制約が付いているとdestroyしようとするとNotNullViolationでROLLBACKする。そんなときは子モデルの方で belongs_to :parent, optional: trueとすることで外部キーにnullが入ることが許容されるようになる
https://qiita.com/takuyanin/items/6f6be86d1265be21bf9e
dependentオプションどれを使うかははケースバイケース(先輩談)