3

J'ai environ 20 Active Jobs différents qui, je le réalise maintenant, auront chacun besoin d'une méthode before_perform dans lequel définir PaperTrail content outside the context of the controller.Ruby: Exécuter la méthode dans le contexte de la classe de base

je comptais mettre cette méthode before_perform dans une aide, puis y compris l'aide dans chacun des emplois, mais j'obtiens une erreur:

undefined method `before_perform' for MyApp:JobHelpers:Module

Je pense que cela est parce que le module en question est juste cela, un module et pas un travail actif. Comment peut éviter de répéter la même ligne 4 méthode before_perform dans chacun de mes travaux actifs.

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

Il serait utile si vous montriez au moins un squelette du module d'aide et comment vous essayez de l'utiliser dans la classe. –

+0

Ok, j'ai ajouté l'assistant et où il est inclus dans le travail. –

+0

Comment l'appelez-vous? –

Répondre

1

J'ai utilisé un included callback pour atteindre mon désiré goa l. J'ai trouvé une meilleure description du rappel inclus que je ne pourrais jamais donner dans une autre réponse here.

Alors que d'autres réponses étaient similaires, s'il vous plaît trouver la solution qui a fonctionné pour moi ci-dessous:

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

Ressaisissez votre aide comme ceci:

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

Vous lisez sur ce sujet en ce moment même! –