Jea*_*ean 7 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
如果记录距离created_at日期超过60天,我需要删除我的商品模型中的记录.
我只找到了有关如何使用rake任务填充模型的信息,但是我找不到有关如何使rake任务删除记录的信息.所以我只是想知道是否必须通过任务执行此操作,或者rails是否还有其他功能可以执行此操作.
Uni*_*key 17
为任务创建一个文件:
# lib/tasks/delete_old_records.rake
namespace :delete do
desc 'Delete records older than 60 days'
task :old_records => :environment do
Model.where('created_at < ?', 60.days.ago).each do |model|
model.destroy
end
# or Model.delete_all('created_at < ?', 60.days.ago) if you don't need callbacks
end
end
Run Code Online (Sandbox Code Playgroud)
运行:
RAILS_ENV=production rake delete:old_records
Run Code Online (Sandbox Code Playgroud)
安排它与cron一起运行(在本例中每天早上8点):
0 8 * * * /bin/bash -l -c 'cd /my/project/releases/current && RAILS_ENV=production rake delete:old_records 2>&1'
Run Code Online (Sandbox Code Playgroud)
您还可以使用nevergem在部署时创建和管理crontab:
every 1.day, :at => '8:00 am' do
rake "delete:old_records"
end
Run Code Online (Sandbox Code Playgroud)
在Github上了解有关gem的更多信息.
60.days.ago生成一个类似的时间戳
Fri, 08 Aug 2014 15:57:18 UTC +00:00
Run Code Online (Sandbox Code Playgroud)
因此,您需要使用<来查找比时间戳更早(更少)的记录.
Online.delete_all("created_at < '#{60.days.ago}'")
Run Code Online (Sandbox Code Playgroud)
这只是Unixmonkey的轻微疏忽.我还使用delete_all而不是循环遍历块中的每个迭代.
| 归档时间: |
|
| 查看次数: |
5453 次 |
| 最近记录: |