2017-06-30 1 views
0

En résumé, j'essaie de transmettre des valeurs de formulaire correspondant aux attributs du modèle de version (fourni par paper_trail gem) à un contrôleur qui appelle une méthode personnalisée, effectue une recherche optimisée. Mais, je reçois un NoMethodError. La méthode fonctionne comme prévu lorsqu'elle est déclarée dans l'initialiseur lui-même, mais pas ailleurs. Des idées sur la façon de résoudre?Comment inclure Concern dans Initializer avec l'imbrication sur l'application Rails 5

code

est inférieure à - j'ai omis des parties qui ne semblent pas pertinentes:

app/controllers/travailleur/csr_activities_controller.rb

class Worker::CustomerSupportActivitiesController < Worker::BaseController 
    def index 
    PaperTrail::Version.search_versions(resource_params) 
    end 

    ... 

    private 
    def resource_params 
     params.fetch(:query).permit(:whodunnit, :event, :item_type, :term, :start_date, :end_date) 
    end 
end 

app/controllers/préoccupations/search_versions.rb

module SearchVersions 
    extend ActiveSupport::Concern 

    def search_versions(params) 
    ... 
    end 
end 

config/initializers/paper_trail.rb

PaperTrail.config.track_associations = false 
PaperTrail.config.version_limit = 100 

require Rails.root.join('./app/controllers/concerns/search_versions.rb') 

module PaperTrail 
    class Version < ActiveRecord::Base  
    include SearchVersions 
    end 
end 

borne

... 
[51e4ee33-6308-4861-bf3a-e1c51ecdfac0] NoMethodError (undefined method `search_versions' for #<Class:0x007f94e5ed2a70>): 
... 

Répondre

1

Classic - figured it out peu de temps après la publication ici. Le problème peut être résolu en changeant:

include SearchVersions à extend SearchVersions à l'intérieur config/initializers/paper_trail.rb. Essentiellement, je dois utiliser extend puisque j'appelle la méthode sur la version de classe qui a été étendue par le module SearchVersions.

Editer: modification de la terminologie basée sur le commentaire d'ingénieursmnky pour éviter toute confusion.

+1

Alors que vous avez raison, votre terminologie n'est pas * "J'appelle la méthode de recherche sur un module plutôt que sur une instance" * vous invoquez la méthode sur la 'Version'' Version' qui a été étendue par le 'Module '' SearchVersions' (** Sidenote **: tout est une instance dans ce cas 'PaperTrail :: Version' est une instance de' Class' 'Class') – engineersmnky

+0

Bonne capture @engineersmnky. Merci pour la clarification. – lgants