2017-06-30 4 views
0

enthalten Kurz gesagt, ich versuche, Formularwerte entsprechend den Attributen auf dem Versionsmodell (von paper_trail gem geliefert) an einen Controller übergeben, der eine benutzerdefinierte Methode aufruft, die Führt eine optimierte Suche durch. Aber ich erhalte einen NoMethodError. Die Methode funktioniert wie vorgesehen, wenn sie innerhalb des Initialisierers selbst, aber nicht an anderer Stelle deklariert wird. Irgendwelche Gedanken zur Reparatur?Wie Bedenken in Initializer mit Verschachtelung auf Rails 5 App

-Code ist unten - ich habe Teile weggelassen, die nicht relevant schien:

app/controllers/Arbeiter/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/Anliegen/search_versions.rb

module SearchVersions 
    extend ActiveSupport::Concern 

    def search_versions(params) 
    ... 
    end 
end 

config/initializers/paper_trail.rb

Terminal

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

Antwort

1

Classic - dachte sie kurz, nachdem hier veröffentlichen. Das Problem kann behoben werden durch:

include SearchVersions zu extend SearchVersions innerhalb config/initializers/paper_trail.rb.

Im Wesentlichen muss ich extend verwenden, seit ich die Methode auf der Klassenversion, die durch die Module SearchVersions erweitert wurde, aufrufen.

Bearbeiten: Terminologie basierend auf engineersmnikys Kommentar geändert, um Verwirrung zu vermeiden.

+1

Während Sie richtig sind, ist Ihre Terminologie nicht * "Ich rufe die Suchmethode auf einem Modul statt einer Instanz auf" * Sie rufen die Methode der 'Class'' Version' auf, die um das 'Module erweitert wurde '' SearchVersions' '(** Sidenote **: in diesem Fall ist alles eine Instanz 'PaperTrail :: Version' ist eine Instanz der' Class' 'Class') – engineersmnky

+0

Guten Fang @engineersmnky. Danke für die Klarstellung. – lgants

Verwandte Themen