【问题标题】:Ruby: Execute method in context of base classRuby:在基类的上下文中执行方法
【发布时间】:2015-12-11 21:51:19
【问题描述】:

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

我计划将此 before_perform 方法放入帮助程序中,然后将帮助程序包含在每个作业中,但出现错误:

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

我认为这是因为有问题的模块只是一个模块,而不是一个活动作业。如何避免在每个活动作业中重复相同的 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 paper-trail-gem rails-activejob


    【解决方案1】:

    像这样重写你的助手:

    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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        相关资源
        最近更新 更多