【Rails】delete, delete_allとdestroy, destroy_allの違いを徹底比較

delete, delete_allについて

delete, delete_allは、指定した条件のレコードをActiveRecordを介さず、SQLを直接実行することで削除します。

また、ActiveRecordを介さないので、モデルで関連づけられているデータは削除されません

deleteは条件に当てはまるデータを一件削除します。

モデル名.find(id).delete

delete_allは条件に当てはまるデータを全て削除します。

モデル名.where(カラム).delete_all

destroy, destroy_allについて

destroy, destroy_allは、指定した条件に当てはまるレコードをActiveRecordを介して削除します。

ただ、deleteと違いモデル内でdependent: :destoryが設定されていれば、関連しているデータも一緒に削除します

destroyは条件に当てはまるデータを一件削除します。

モデル名.find(id).destroy

destroy_allは条件に当てはまるデータを全て削除します。

モデル名.where(カラム).delete_all

関連しているデータがある場合の例

User.find(1).destroy

Tweetモデルと関連しているUserモデルのテーブルのidが1のデータを削除した場合、Userのid:1と関連しているTweetのデータも一緒に削除します。

タイトルとURLをコピーしました