web-dev-qa-db-ja.com

Rails-条件を満たすすべてのレコードを削除する

Railsのように書きますか?私はモデルがあります-マネージャー。manager_levelが5である条件を満たすマネージャーからすべてのレコードを削除したいです。

ありがとうございました。

37
Noam B.

Deleteではなくdestroyを使用した方が良いと思います

destroyはdbから現在のオブジェクトレコードを削除し、dbから関連する子レコードも削除するため( https://stackoverflow.com/a/22757656/5452072

また、deleteはコールバックをスキップしますが、destroyはスキップしません。

Manager.where(:manager_level => 5).destroy_all
70
MurifoX

これを試して:

Manager.delete_all(manager_level: 5)
33
Andrew Hare

これは動作するはずです:

Manager.where(:manager_level => 5).delete_all

注:これにより、従属レコードは削除されません。

17
iouri