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

Min*_*ure 7 sql postgresql performance activerecord ruby-on-rails

有没有更快的方法来摧毁所有的铁轨?

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

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

Blerg.where("created_at > yesterday").destroy_all (4 results)
Run Code Online (Sandbox Code Playgroud)

然后打电话......

DELETE FROM "blergs" WHERE "blergs"."id" = $1  [["id", 197782]]
Run Code Online (Sandbox Code Playgroud)

4次.

有没有办法把它变成一个sql命令?

Car*_*rot 11

你总是可以打电话

Blerg.where("created_at > yesterday").delete_all
Run Code Online (Sandbox Code Playgroud)

这只提供一个查询:

DELETE FROM "blergs" WHERE (created_at > '2012-11-26 16:27:56.678872')
Run Code Online (Sandbox Code Playgroud)

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

  • 回调是重要的一点.如果你有任何:dependent =>:destroy涉及的关系,它们也不会被删除. (3认同)