50

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

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

4

4 に答える 4

84

削除する代わりに破棄を使用する方が良いと思います

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

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

Manager.where(:manager_level => 5).destroy_all
于 2012-10-10T18:33:19.590 に答える
36

これを試して:

Manager.delete_all(manager_level: 5)
于 2012-10-10T18:33:10.653 に答える
19

これは機能するはずです:

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

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

于 2012-10-10T18:32:35.920 に答える
7

delete_all/destroy_allRails 5.1以降、メソッドに条件を渡すことはできません

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

これにより、複数のクエリが実行され、各レコードが削除されます

しかし、Rails 6では、delete_byを使用して条件を使用して削除できます。

Manager.delete_by(manager_level: 5)

これにより、単一の削除クエリが実行されます

delete from managers where manager_level = 5

于 2020-03-26T15:50:19.557 に答える