【问题标题】:Automatically change status of post Rails自动更改 post Rails 的状态
【发布时间】:2015-05-08 20:18:28
【问题描述】:

在我的 Rails 应用程序中,我有一个工作模型,我希望在管理员批准 30 天后自动将状态更改为“已归档”,这可能吗?如果是这样,该怎么做?

【问题讨论】:

  • 你需要做一个 rake 任务
  • 我已经投票结束这个问题,因为我认为它对 SO 来说太宽泛了。但是,如果您查看Rails Guide for Active Job,您可能会得到一些想法。
  • @Cyzanfar 因此,如果我创建一个任务,它将自动运行,或者我必须每天运行它自己对这个问题感到抱歉,但我从未处理过任务

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord


【解决方案1】:

当它进入批准状态时,我会添加一个名为“archive_time”的属性作为日期时间。 然后你可以设置一个 rake 任务来设置归档状态和 archive_time 过去的位置。这可能看起来像这样:

jobs = Job.where("state = ? and archive_time >= ?", 'approved', Time.now)
jobs.each {|job| job.archive }

然后安排 rake 任务每天运行一次。我会使用 cron 来实现这一点。

【讨论】:

  • 另外,“whenever” gem 是管理 rails cron 作业的好方法。
【解决方案2】:

rake 任务或后台作业(例如 Active Job 或 Delayed Job )可以解决问题,但在这种情况下您可能不需要它们。如果您正在处理数据库中的时间戳,您可以创建一个范围或方法来将作业标记为已归档。

例如,如果您有一个名为 approved_at 的列,它就是 datetime。当你批准一个工作时,你设置approved_at = Time.now

现在您可以创建一个方法来指示作业是否已存档:

def is_archived?
  approved_at && approved_at < Time.now - 30.days
end

要获取所有已归档的作业,您可以创建一个范围:

scope :archived, -> { where('approved_at IS NOT NULL AND approved_at <?', Time.now - 30.days)}

【讨论】:

  • 您好,这是部分工作,但我仍然有一个问题是我在作业表中有一个名为 jobstatus 的列,我想在作业存档时更改为“已存档”
  • 按照我的建议,您将不再需要 job_status 列(也就是说,如果您只有 3 个状态:未批准、已批准和存档)
猜你喜欢
  • 2017-09-16
  • 2021-11-26
  • 2021-04-19
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多