我有一个rails应用程序,其中包含model = 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>
我使用Webbrick在Mac上运行此代码。清理完数据库后,我会将其上传到Heroku。
我遇到的问题是代码需要很长时间才能运行,并且我遇到了超时错误。
问题:
1)这是清理数据库的合理方式吗?
2)如何绕过此代码的超时?
感谢您的帮助!
答案 0 :(得分:1)
这可能是因为所有记录都被加载到内存中。尝试在batches处理:
Workorder.where("wonum like ?", "13-%").find_each { |wo| wo.destroy }
正如布拉德所提到的,您可以使用delete_all
,但只有在您不需要删除任何相关模型时才能这样做。
回答(2),这不是清理数据库的逻辑方法(使用前端上的链接)。创建rake
任务,或从控制台与数据库交互(运行rails console
)。