3

У меня около 20 различных Active Jobs, которые я сейчас понимаю, каждый будет нуждаться в методе before_perform, в котором можно установить PaperTrail content outside the context of the controller.Ruby: Выполнить метод в контексте базового класса

Я планировал поставить этот 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 
+0

Было бы полезно, если бы вы показали по крайней мере, скелет хелперов модуля и как вы пытаетесь использовать его в классе. –

+0

Хорошо, я добавил помощника и там, где он включен в задание. –

+0

Как вы это называете? –

ответ

1

Я использовал 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 
2

Перепишите ваш помощник, как это:

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 
+0

Читайте об этом, когда мы говорим! –