3

我有大约 20 个不同的Active Jobs,我现在意识到它们都需要一种before_perform方法来在控制器的上下文之外设置 PaperTrail 内容

我打算把这个before_perform方法放在一个助手中,然后在每个作业中包含这个助手,但我得到了一个错误:

MyApp:JobHelpers:Module 的未定义方法“before_perform”

我认为这是因为有问题的模块只是一个模块,而不是一个活动作业。如何避免before_perform在每个活动作业中重复相同的 4 行方法?

Job_helper:

module MyApp
  module JobHelpers
    before_perform do |job|
      # stuff to do
    end
  end
end

工作:

require 'my_app/job_helpers'

class TheJob < ActiveJob::Base
  include MyApp::JobHelpers

 # Do more stuff
end
4

2 回答 2

3

像这样重写你的助手:

module MyApp
  module JobHelpers
    extend ActiveSupport::Concern

    included do

      # inside this you can call ActiveJob helpers
      before_perform do
        # stuff to do
      end
    end
  end
end
于 2015-09-15T15:35:47.810 回答
2

我使用included回调来实现我想要的目标。我发现对包含的回调的描述比我在这里给出的另一个答案更好。

虽然其他答案相似,但请在下面找到对我有用的解决方案:

module MyApp
  module JobHelpers
    def self.included(job_class)
      job_class.before_perform do |job|
        # work to be completed  
      end
    end
  end
end
于 2015-09-18T09:58:33.537 回答