Ruby:基类上下文中的Execute方法

问题描述 投票:3回答:2

我有大约20种不同的Active Jobs,我现在意识到每个都需要一个before_perform方法来设置PaperTrail content outside the context of the controller

我打算将这个before_perform方法放在帮助器中,然后在每个作业中包含帮助器,但是我收到一个错误:

MyApp的未定义方法`before_perform':JobHelpers:Module

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

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
ruby-on-rails ruby-on-rails-4 paper-trail-gem rails-activejob
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

2
投票

我使用included callback来达到我想要的目标。我找到了一个更好的描述包含的回调,而不是我在另一个答案here给出。

虽然其他答案相似,但请找到适用于我的解决方案:

module MyApp
  module JobHelpers
    def self.included(job_class)
      job_class.before_perform do |job|
        # work to be completed  
      end
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.