Rails:创建后10分钟删除对象?

时间:2014-02-26 15:57:35

标签: ruby-on-rails

delete之后如何created某个对象的某些时间?

我觉得它会是这样的?但是我该如何安排这个行动?

  after_create :destroy_essay

  def destroy_essay
    #  10minutes later
    # self.destroy  
  end

3 个答案:

答案 0 :(得分:1)

对于后勤工作者来说,这实际上是一项完美的工作。我绝对建议使用Sidekiq它甚至提供了一种在未来一定时间后完成工作的方法。 https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs

EssayDestroyer.perform_at(10.minutes.from_now)

EssayDestroyer工作人员上,然后编写要执行的代码以销毁您创建的文章。

答案 1 :(得分:0)

您应该为此编写rake任务,并使用cron,或者如果您使用Heroku,Heroku Scheduler来运行它。

在模型中添加范围,例如expired,返回超过10分钟的所有项目,然后在rake任务中执行Essay.expired.destroy_all并运行此任务,例如每隔一分钟。

这个耙子看起来像这样:

namespace :app do
  desc "Remove expired essays"

  task :remove_expired_essays => :environment do
    Essay.expired.destroy_all
  end
end

以及模型中的范围:

scope :expired, -> { where('created_at >= ?', 10.minutes.ago) }

答案 2 :(得分:0)

@methyl我认为正确的范围是scope :expired, -> { where('created_at <= ?', 10.minutes.ago) },不是吗?