Rails - Delete all Records that Meet a Condition

落爺英雄遲暮 提交于 2020-12-27 12:10:06

问题


How do you write in the Rails way? I have a model - Managers. I want to delete all records from Managers that meet the condition that manager_level is 5.

Thank you.


回答1:


I think it is better to use destroy instead of delete

because destroy will delete current object record from db and also its associated children record from db (https://stackoverflow.com/a/22757656/5452072)

Also delete will skip callbacks, but destroy doesn't.

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



回答2:


Try this:

Manager.delete_all(manager_level: 5)



回答3:


This should work:

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

Note: This will not remove dependent records.




回答4:


After Rails 5.1., We cannot pass conditions to delete_all/destroy_all method

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

This will run multiple queries to delete each record

But in Rails 6, we can use delete_by to delete using condition,

Manager.delete_by(manager_level: 5)

This will run single delete query

delete from managers where manager_level = 5



来源:https://stackoverflow.com/questions/12825945/rails-delete-all-records-that-meet-a-condition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!