在后台运行活动作业方法取决于场景

时间:2018-04-11 09:10:35

标签: ruby-on-rails ruby delayed-job rails-activejob

我正在使用活动工作在后台运行我的工作。但是我想在一个场景中在后台运行一个作业,而在其他场景中不在后台运行该作业。让我知道我该怎么做?

例如:

def update_name(user_id, name)
 user = User.find_by_id(user_id)
 user.update_attribute(:name, name)
end
handle_asynchronously :update_name, if is_delayed

在这个例子中,如果is_delayed为true,我在后台运行update_name方法。如果is_delayed为false,那么update_name将不会在后台运行。所以在活动作业中是否还有这样做?

1 个答案:

答案 0 :(得分:3)

您可以相应地使用perform_nowperform_later

class UpdateUserNameJob < ActiveJob::Base
  queue_as :default

  def perform(user_id, name)
    user = User.find_by_id(user_id)
    user.update_attribute(:name, name)
  end
end

根据is_delay

延迟作业执行
if is_delayed
  UpdateUserNameJob.perform_later(user_id, name)
else
  UpdateUserNameJob.perform_now(user_id, name)
end