我需要擦除记录在我的报价模式,如果记录有一个来自created_at日期超过60天。
我只找到有关如何填充我的模型用耙子任务的信息,但我找不到任何关于如何使一个rake任务删除记录信息。 所以,我只是想知道如果我有一个任务来完成,或者如果轨道有别的事情要做到这一点。
我需要擦除记录在我的报价模式,如果记录有一个来自created_at日期超过60天。
我只找到有关如何填充我的模型用耙子任务的信息,但我找不到任何关于如何使一个rake任务删除记录信息。 所以,我只是想知道如果我有一个任务来完成,或者如果轨道有别的事情要做到这一点。
创建任务的文件:
# 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'
您也可以使用宝石时就展开时创建和管理你的crontab:
every 1.day, :at => '8:00 am' do
rake "delete:old_records"
end
了解更多关于创业板Github上 。
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任务删除过期的优惠 ,或为您提供的模型创建类的方法,并使用调用它,例如, 只要宝石。