Railsのやり方でどのように書きますか?私にはモデルがあります-マネージャー。manager_levelが5であるという条件を満たすマネージャーからすべてのレコードを削除したい。
ありがとうございました。
Railsのやり方でどのように書きますか?私にはモデルがあります-マネージャー。manager_levelが5であるという条件を満たすマネージャーからすべてのレコードを削除したい。
ありがとうございました。
削除する代わりに破棄を使用する方が良いと思います
destroyはdbから現在のオブジェクトレコードとそれに関連する子レコードをdbから削除するためです(https://stackoverflow.com/a/22757656/5452072)
また、deleteはコールバックをスキップしますが、destroyはスキップしません。
Manager.where(:manager_level => 5).destroy_all
これを試して:
Manager.delete_all(manager_level: 5)
これは機能するはずです:
Manager.where(:manager_level => 5).delete_all
注:これにより、依存レコードは削除されません。
delete_all/destroy_all
Rails 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