每60天删除一次记录

如果记录距离created_at日期超过60天,我需要删除我的商品模型中的记录。

我只找到了有关如何使用rake任务填充模型的信息,但是我找不到有关如何使rake任务删除记录的信息。 所以我只是想知道是否必须通过任务执行此操作,或者rails是否还有其他function可以执行此操作。

为任务创建一个文件:

# 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 

运行:

 RAILS_ENV=production rake delete:old_records 

安排它与cron一起运行(在本例中每天早上8点):

 0 8 * * * /bin/bash -l -c 'cd /my/project/releases/current && RAILS_ENV=production rake delete:old_records 2>&1' 

您还可以使用[whenever][1] gem在部署时创建和管理crontab:

 every 1.day, :at => '8:00 am' do rake "delete:old_records" end 

60.days.ago生成一个类似的时间戳

 Fri, 08 Aug 2014 15:57:18 UTC +00:00 

因此,您需要使用<来查找比时间戳更早(更少)的记录。

 Online.delete_all("created_at < '#{60.days.ago}'") 

这只是Unixmonkey的轻微疏忽。 我还使用delete_all而不是循环每个迭代块。

您可以创建一个rake任务来删除过期的商品 ,或者为商品模型创建类方法,并使用例如gem 时调用它。