我想在before_enqueue
回调中执行一些初始参数验证,以便在作业入队时出现问题时可以提出这些问题。
这将使我能够立即向用户提供有关问题的反馈,而不是让作业尝试运行,失败,然后以某种方式将反馈反馈给用户。
我看到in the API documentation传递了一个作业对象到回调中,但是从API文档和Rails Guides尚不清楚如何从该对象获取perform
参数。
答案 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"}]