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 执行。日期
我没有足够的信息来确定,但是保持系统更新记录对我来说听起来有点过分。真的有必要存储你的模型 status
字段吗?我的意思是,您还可以计算您的记录是否在您需要时过期,并且仅在您需要时才过期,只需在您的模型中添加一个 scope
,例如:
class Food < ApplicationRecord
scope :not_expired, -> { where(:expiration_date > DateTime.now) }
end
然后你是这样使用的:
@groceries = Food.not_expired
我正在制作一个拍卖网络应用程序。创建广告时,我会自动将 到期日期 添加到数据库中。
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 执行。日期
我没有足够的信息来确定,但是保持系统更新记录对我来说听起来有点过分。真的有必要存储你的模型 status
字段吗?我的意思是,您还可以计算您的记录是否在您需要时过期,并且仅在您需要时才过期,只需在您的模型中添加一个 scope
,例如:
class Food < ApplicationRecord
scope :not_expired, -> { where(:expiration_date > DateTime.now) }
end
然后你是这样使用的:
@groceries = Food.not_expired