Ruby: 在基础 class 的上下文中执行方法

Ruby: Execute method in context of base class

我有大约 20 个不同的 Active Jobs which I now realise are each going to need a before_perform method in which to set PaperTrail content outside the context of the controller

我正计划将这个 before_perform 方法放在一个助手中,然后在每个作业中包含这个助手,但我收到一个错误:

undefined method `before_perform' for MyApp:JobHelpers:Module

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

Job_helper:

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

The_job:

require 'my_app/job_helpers'

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

 # Do more stuff
end

像这样重写你的助手:

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

我用了一个included callback to achieve my desired goal. I found a better description of the included callback than I could ever give in another answer here

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

module MyApp
  module JobHelpers
    def self.included(job_class)
      job_class.before_perform do |job|
        # work to be completed  
      end
    end
  end
end