在Rails中执行destroy_all的更有效方法?

时间:2012-11-27 16:20:45

标签: sql ruby-on-rails postgresql activerecord performance

是否有更快捷的方法可以摧毁所有的铁轨?

我问这是因为rails会对每条记录执行单独的删除sql查询。

例如,在搜索4条记录时调用destroy all将运行4条删除sql命令。

Blerg.where("created_at > yesterday").destroy_all (4 results)
然后打电话......

DELETE FROM "blergs" WHERE "blergs"."id" = $1  [["id", 197782]]

4次。

有没有办法让它进入一个sql命令?

2 个答案:

答案 0 :(得分:11)

您随时可以致电

Blerg.where("created_at > yesterday").delete_all

这只提供一个查询:

DELETE FROM "blergs" WHERE (created_at > '2012-11-26 16:27:56.678872')

请注意,这不会调用要删除的对象的任何回调。

答案 1 :(得分:3)

您也可以

Blerg.delete_all("created_at > '2012-11-01 00:00:00'")

更简洁。它执行一个SQL语句。