我想在后台执行此操作
Product.all.map { |product| product.save }
当我保存产品时,将调用回调以在产品成本的表格中创建新记录
我为此创建了一个作业,但是如果我执行perform_now
,它就不会在后台执行,并且perform_later
会在很久之后执行。
我想立即执行此操作,但在后台执行。我不确定我是否也可以在一个线程中执行它。
我正在使用延迟工作,这是工作
class UpdateProductCostsJob < ApplicationJob
queue_as :default
def perform
Product.all.map { |product| product.save }
end
end
我希望每次保存此模型时执行
class CostComposition < ApplicationRecord
before_save :update_product_costs
private
def update_product_costs
UpdateProductCostsJob.perform_now
end
end
答案 0 :(得分:1)
假设您使用的是rails 5,您可以创建一个高优先级队列并在该队列下创建作业。如果只有一个队列,则可以将作业添加到队列中,并指定处理该作业的时间。
UpdateProductCostJob.set(wait_until: Time.now + 5.minutes).perform_later
参考http://edgeguides.rubyonrails.org/active_job_basics.html#enqueue-the-job