基本上我想要做的是删除一个文件和一个记录(其中包含文件路径)当记录是三个月大,该文件是通过Carrierwave上传的.
这有点我删除记录和文件的想法.
# Code for deleteing PDF files (receipts) every 90 days def auto_delete_receipts #get user id from params or as a method parameter user = params[:id] user.receipts.each do |receipt| #check if receipt is three months old receipt.remove_receiptFile! receipt.save #end end end
所以我想知道我应该在哪里找到我的方法以及如何在每次记录三个月之后自动运行它,以便删除它.
谢谢阅读.
你是从错误的角度看待它.而不是创建一个将在三个月后触发的回调,而是创建一个定期运行的任务,并修剪早于某个年龄的记录.
反过来做这件事并不是非常有效,因为你需要跟踪所有这些回调应该被触发的时间,你必须在每个记录的基础上进行.
第一步是创建一个rake任务:
namespace :things do desc "Removes records older than 3 months" task :prune => :environment do puts "Removing things older than 3 months" destroyed = Thing.where("created_at < ?", 3.months.ago).destroy_all puts "{destroyed.length} records deleted." end end
whenever
如果要部署到支持cron的服务器,则注释中提到的gem是安排此方法的好方法.在Heroku上,您可以使用Scheduler而不是插件.