Ruby on Rail - 添加后台任务以更新状态和到期日期

Ruby on Rail - Add background task to update status and expiration date

我正在制作一个拍卖网络应用程序。创建广告时,我会自动将 到期日期 添加到数据库中。

  before_create :set_expiration_date

  def set_expiration_date
    self.expiration_date =  Time.now + 60.days
  end 

如何添加 背景 task/job,以便当广告达到其 到期日期 时,它可以更改status to false.

我可以在我的情况下使用gem吗?

我试过每当gem时,它非常麻烦,而且它没有运行在后台并且难以理解。

在您的 lib/tasks 文件中,创建一个名为 something.rake 的文件,然后在该文件中创建一个任务:

task :name_of_task => :environment do
  # name of model
  Ad.find_each do |ad|
     # if add expired, change status to false and save
  end
end

您可以通过在终端中输入 rake name_of_task 来 运行 您的任务...或者如果您使用的是 heroku,则可以将 name_of_task 添加到 heroku 调度程序。 https://elements.heroku.com/addons/scheduler

只需创建后台作业更改创建回调后的状态,这将在 exp 执行。日期

更多信息:http://guides.rubyonrails.org/active_job_basics.html

我没有足够的信息来确定,但是保持系统更新记录对我来说听起来有点过分。真的有必要存储你的模型 status 字段吗?我的意思是,您还可以计算您的记录是否在您需要时过期,并且仅在您需要时才过期,只需在您的模型中添加一个 scope,例如:

class Food < ApplicationRecord
  scope :not_expired, -> { where(:expiration_date > DateTime.now) }
end

然后你是这样使用的:

@groceries = Food.not_expired