ruby on rails -每60天擦除记录



如果记录距离created_at日期超过60天,我需要擦除报价模型中的记录。

我只找到了关于如何用rake任务填充模型的信息,但是我找不到关于如何使rake任务删除记录的信息。我只是想知道我是否需要用任务来做这个,或者如果rails有别的东西来做这个。

为任务创建文件:

# 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'

还可以使用每当 gem在部署时创建和管理crontab:

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

在Github上了解更多关于gem的信息。

60天。Ago生成像

这样的时间戳
Fri, 08 Aug 2014 15:57:18 UTC +00:00

所以你需要使用<查找比时间戳更早(更短)的记录>

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

这只是Unixmonkey的一个小疏忽。我还将使用delete_all而不是在块中循环每次迭代。

您可以创建一个rake任务来删除过期的报价,或者为您的报价模型创建一个类方法,并使用如下方法调用它,例如:每当gem.

您可以在单个查询中删除超过60天的所有记录,如下所示:

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

相关内容

  • 没有找到相关文章

最新更新