【发布时间】:2012-10-10 18:27:59
【问题描述】:
您如何以 Rails 方式编写代码? 我有一个模型 - 经理。 我想删除Managers中满足manager_level为5的所有记录。
谢谢。
【问题讨论】:
标签: sql ruby-on-rails activerecord
您如何以 Rails 方式编写代码? 我有一个模型 - 经理。 我想删除Managers中满足manager_level为5的所有记录。
谢谢。
【问题讨论】:
标签: sql ruby-on-rails activerecord
我认为使用destroy而不是delete更好
因为destroy会从db中删除当前的对象记录以及它的 来自 db (https://stackoverflow.com/a/22757656/5452072) 的关联子记录
delete 也会跳过回调,但 destroy 不会。
Manager.where(:manager_level => 5).destroy_all
【讨论】:
试试这个:
Manager.delete_all(manager_level: 5)
【讨论】:
delete_all/destroy_all的条件是removed in rails 5.1。
这应该可行:
Manager.where(:manager_level => 5).delete_all
注意:这不会删除相关记录。
【讨论】:
在 Rails 5.1. 之后,我们无法将条件传递给 delete_all/destroy_all 方法
Manager.where(:manager_level => 5).delete_all
这将运行多个查询以删除每条记录
但是在Rails 6中,我们可以使用delete_by来删除使用条件,
Manager.delete_by(manager_level: 5)
这将运行单个删除查询
delete from managers where manager_level = 5
【讨论】: