50

您如何以 Rails 方式编写代码?我有一个模型 - 经理。我想删除满足 manager_level 为 5 条件的 Managers 中的所有记录。

谢谢你。

4

4 回答 4

84

我认为最好使用destroy而不是delete

因为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

在 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

于 2020-03-26T15:50:19.557 回答