是否可以在before_enqueue回调中访问作业的参数?

时间:2020-06-22 17:49:43

标签: ruby-on-rails rails-activejob

我想在before_enqueue回调中执行一些初始参数验证,以便在作业入队时出现问题时可以提出这些问题。

这将使我能够立即向用户提供有关问题的反馈,而不是让作业尝试运行,失败,然后以某种方式将反馈反馈给用户。

我看到in the API documentation传递了一个作业对象到回调中,但是从API文档和Rails Guides尚不清楚如何从该对象获取perform参数。

1 个答案:

答案 0 :(得分:1)

在REPL中进行了一些探索之后,我发现传递给回调的job对象具有一个arguments访问器,该访问器是参数数组。

使用普通参数,它们将按位置位于arguments数组中:

class TestJob < ApplicationJob
  def perform(arg1, arg2); end

  before_enqueue { |job| puts job.arguments }
end

TestJob.perform_later(:foo, 'bar')
# [:foo, "bar"]

使用命名参数,它们位于数组的第一个位置的散列中:

class TestJob < ApplicationJob
  def perform(arg1:, arg2:); end

  before_enqueue { |job| puts job.arguments }
end

TestJob.perform_later(arg1: :foo, arg2: 'bar')
# [{:arg1=>:foo, :arg2=>"bar"}]