Ril*_*eyE 1 database rake ruby-on-rails delete-row
有没有办法使用 rake 从数据库中删除除最后 30 个左右的结果之外的所有结果?我是否必须获取数据库计数,检查 30 后的结果,然后删除所有创建日期之前的内容?
当然,按照你的建议去做:
delete_all_but_oldest_30.rake:
task :delete_all_but_oldest_30 => :environment do
query = MyModel.order("created_at desc")
query.limit(query.count - 30).destroy_all
end
Run Code Online (Sandbox Code Playgroud)
您应该按照您认为合适的方式自定义它——您只需要确定“最后”的含义:最旧、最高 ID、最低 ID 等。只需使用您想要的任何顺序的相反顺序,以便最后 30 个结果是那些你想保留的。因此,要保持最低的 ID,请按"id desc".
注意:这在技术上并不能保证只剩下 30 条记录,因为它是非事务性的。在此 rake 任务运行时异步添加更多记录时,结果不确定。根据您的应用程序,这可能是也可能不是问题。如果你只是删除旧记录,我怀疑这个 rake 任务很好。如果没有,您可以将整个任务包装在transaction. 但是,如果您要删除大量记录,这是不可取的,因为事务会占用数据库。
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |