Ruby on rails 如何在设定的时间后更改模型的属性

Ruby on rails 如何在设定的时间后更改模型的属性,ruby-on-rails,activerecord,rails-activejob,Ruby On Rails,Activerecord,Rails Activejob,我的应用程序中有一个计时器类,它将在创建后24小时过期 如果在创建日期后24小时运行,是否有办法运行expire\u,或者我必须每分钟运行一次cron作业 class Timer < ApplicationRecord enum status: { running: 1, # the default expired: 2 # timed out finished: 3 # completed } # if the Timer isn't finishe

我的应用程序中有一个计时器类,它将在创建后24小时过期

如果在创建日期后24小时运行,是否有办法运行expire\u,或者我必须每分钟运行一次cron作业

class Timer < ApplicationRecord
  enum status: {
    running: 1, # the default
    expired: 2 # timed out
    finished: 3 # completed
  }

  # if the Timer isn't finished, expire it
  def expire_if_running
    self.status = "expired" if self.running?
  end
end
类计时器
请为您的答案提供示例代码或引用。我以前从未使用过ActiveJob,我隐隐觉得这是一种需要它的情况。

运行“cron作业”是一种方法。但与其每分钟运行一次,不如每小时运行一次,除非有特定原因需要1分钟的精度


ActiveJob()是实现这一点的一种方法。我推荐Sidekiq,因为它对我们很有用。但是,如果没有关于您的环境的具体信息(Heroku?),我无法确切地指定如何执行此操作。

我找到了一种方法,可以使用
延迟的\u作业运行此完全相同的场景,这会更好,因为它在将来某个时间运行

按分钟计算的cronjob在计时器过期时可能延迟59秒。
按小时计算的cronjob可能会延迟59分钟使计时器过期


下面是来自Twilio的关于如何制作提醒应用程序的文章

我们目前正在生产中使用Heroku,但我们计划最终转移到我们自己的基础设施。ActiveJob不像ActiveRecord在ORM中那样有自己的语法。在阅读了ActiveJob的文档后,它似乎在将来的特定时间运行任务。对于“cron作业”功能,可以使用Heroku调度程序。编写一个rake任务,该任务将更新所有过期作业的状态。