Rails mit eingeschlossenen Helfern in Klassenmethoden

8

Weiß jemand, warum die eingeschlossene Methode innerhalb einer Klassenmethode nicht funktioniert?

%Vor%     
Brian Armstrong 09.06.2011, 23:30
quelle

3 Antworten

9

Für alle, die einige benutzerdefinierte Helfer in der Klassenbibliothek oder im Modell verwenden möchten, lohnt es sich manchmal nicht, alle Helfer einzuschließen. Rufen Sie stattdessen direkt auf:

%Vor%

(Aus Ссылка )

    
lulalala 01.12.2015 05:14
quelle
6

Ich hatte das gleiche Problem. Hier ist, wie ich es gelöst habe,

%Vor%

Danke an RailsForum .

    
Swaathi Kakarla 18.02.2015 11:06
quelle
5

Es ist schwer zu sagen, ohne Ihren Hilfscode zu sehen, aber include fügt alle Methoden in diesem Modul in Instanzen der Klasse ein, in die Sie eingebunden sind. extend wird verwendet, um Methoden in eine Klasse zu bringen. Wenn Sie also nur Methoden in NumberHelper definiert haben, werden diese auf alle Instanzen von MyClass gesetzt, nicht aber auf die Klasse.

Die Art, wie viele Rails-Erweiterungen funktionieren, verwendet Techniken, die in ActiveSupport :: Concern konsolidiert wurden. Hier ist ein guter Überblick.

Wenn Sie ActiveSupport :: Concern in Ihren Modulen erweitern, können Sie in Submodulen namens ClassMethods und InstanceMethods angeben, welche Funktionen zu Klassen und Instanzen hinzugefügt werden sollen, in die Sie Ihr Modul aufnehmen. Zum Beispiel:

%Vor%

Ich habe dies bereits früher benutzt, um Dinge wie die Bar-Funktion in ClassMethods zu definieren, und mache sie dann für Instanzen verfügbar, indem ich eine Bar-Methode desselben Namens definiere, die nur diese.class.bar aufruft und von beiden aufrufbar macht . Es gibt viele andere hilfreiche Dinge, die ActiveSupport :: Concern tut, wie zum Beispiel das Definieren von Blöcken, die zurückgerufen werden, wenn das Modul enthalten ist.

Nun, das passiert hier gerade deshalb, weil Sie% your_helfer haben, was darauf hindeutet, dass diese Funktionalität allgemeiner ist als ein Helfer - Helfer werden nur automatisch in Ansichten aufgenommen , da sie nur dazu dienen, mit Ansichten zu helfen. Wenn Sie Ihren Helper in einer Ansicht verwenden möchten, können Sie die include verwenden Makro in Ihrer Klasse, um diese Methode für Ihre Ansichten sichtbar zu machen, oder noch besser, machen Sie ein Modul wie oben und denken Sie nicht daran als Helfer, sondern verwenden Sie include, um es zu den Klassen zu mischen, in denen Sie es verwenden möchten Ich denke, ich würde diesen Weg gehen - es gibt nichts, was sagt, dass man kein HumanReadableNumber-Modul und helper_method it in NumberHelper erstellen kann, um es in Ihren Ansichten leicht verfügbar zu machen.

    
Matt 09.06.2011 23:40
quelle

Tags und Links