我有一个rails应用程序,它包含一个模型= workorder。
该数据库包含22,468个工作订单,其wonum以13-开头。我想删除它们。workorder有几个带有has-many的表,所以我想通过编程来实现它,而不是直接针对数据库使用SQL。
这是我试图使用的代码:
<div class="span11">
<h4>Records Deleted: </h4>
<%= Workorder.where("wonum like ?", "13-%").count %>
<%= Workorder.where("wonum like ?", "13-%").destroy_all %>
</div>我正在我的Mac上运行这段代码。一旦我清理了数据库,我会把它上传到Heroku。
我遇到的问题是,代码需要很长时间才能运行,而且我会得到超时错误。
问题:
1)这是清理数据库的合乎逻辑的方法吗?
2)如何绕过此代码的任何超时?
谢谢你的帮助!
发布于 2014-04-16 22:55:26
这可能是因为所有的记录都被加载到内存中。在批次中尝试处理
Workorder.where("wonum like ?", "13-%").find_each { |wo| wo.destroy }正如布拉德所提到的,您可以使用delete_all,但是只有在不需要删除任何关联模型的情况下才能这样做。
要回答(2),这不是清理数据库的逻辑方法(使用前端的链接)。创建一个rake任务,或者从控制台与数据库交互(运行rails console)。
https://stackoverflow.com/questions/23121134
复制相似问题