削除系メソッド(delete, delete_all, destroy, destroy_all)について
【結論】
・deleteは、指定した条件のレコードに対して
SQLのDELTE文を直接実行する。
その為、関連付けられてるレコードは削除されない。
・destroyは、ActiveRecordを介して
指定した条件のレコードを削除する。
関連付けられてるレコードも削除される。
・_allは、特定の条件に
一致するレコードをまとめて削除する
【目次】
【本題】
削除系メソッドについて
RailsのActiveRecordには、レコードの削除に対応した
メソッドが4種類存在します。
今回は、各メソッドの仕様と
使い分けについて、解説します。
deleteについて
deleteは、指定した条件に合致する
一件のレコードを削除します。
処理の流れとしては、直接SQLのDELTE文を実行します。
なので、モデルは経由しない為、
関連付けたテーブルのレコードは削除されません。
User.find(id: 1).delete
destroyについて
destroyも、指定した条件に合致する
一件のレコードを削除します。
deleteとの違いを上げるとすると、
モデル(ActiveRecord)を介して削除を行う点です。
その為、関連付けさせたモデルに
dependent: :destroyを指定していれば、
そちらのレコードも一緒に削除してくれます。
User.find(1).destroy
delete_allとdestroy_allについて
これらは、deleteやdestroyと違い、
条件に合致する複数のレコードを同時に削除することが可能です。
Post.where(user_id: 1).delete_all Post.where(user_id: 1).destroy_all