Weiß jemand, warum die eingeschlossene Methode innerhalb einer Klassenmethode nicht funktioniert?
%Vor%Ich hatte das gleiche Problem. Hier ist, wie ich es gelöst habe,
%Vor%Danke an RailsForum .
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.
Tags und Links ruby ruby-on-rails