NoMethodError, wenn Sie versuchen zu berufen helper-Methode von Rails-controller
Ich bin immer ein NoMethodError
beim Zugriff auf eine Methode definiert, die in einem meiner Helfer-Module von einem meiner controller-Klassen. Meine Rails-Anwendung verwendet die helper
Klasse Methode mit der :all
- symbol wie unten gezeigt:
class ApplicationController < ActionController::Base
helper :all
.
.
end
Mein Verständnis ist, dass dies sollte alle meine controller-Klassen enthalten automatisch alle helper-Module innerhalb der app/helpers Verzeichnis, daher mischen Sie in allen Methoden in den Controllern. Ist das richtig?
Wenn ich explizit include
das Helfer-Modul in den controller, dann funktioniert alles richtig.
InformationsquelleAutor der Frage John Topley | 2009-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
helper :all
macht alle Helfer (ja, alle) verfügbar in den Ansichten, ist es nicht in den controller.Wenn Sie möchten, einige gemeinsame code zwischen helper und controller, die nicht sehr wünschenswert, weil Helfer UI-code und-Steuerung ist, naja, controller-code, können Sie entweder die Helfer in den controller, oder erstellen Sie ein separates Modul, und schließen Sie, in dem controller und der Helfer auch.
InformationsquelleAutor der Antwort Honza
Verwenden Sie die helper-Methoden, die schon in der Vorlage enthalten Motor:
@template
variable.view_context
Beispiel für die Verwendung von calling "number_to_currency' in einer controller-Methode:
InformationsquelleAutor der Antwort gamecreature
wenn Sie brauchen, um zu teilen eine Methode, die zwischen einem controller und Helfer/- Ansicht können Sie einfach definieren Sie über 'helper_method' an der Oberseite des Controllers:
hoffe, das hilft
InformationsquelleAutor der Antwort ben
Helper-Methoden von Controllern
Einen Weg, um zu Ihrer helper-Methoden ist es einfach, um Ihre helper-Datei.
Dieser bringt alle Methoden aus, die helper-Modul ist, in den Bereich im controller. Das ist nicht immer eine gute Sache. Halten Sie den Bereich trennen, erstellen Sie ein Objekt, durchtränken es mit den Kräften der Helfer, und es verwenden, um die Methoden aufzurufen:
Helfer :alle
helper :all
macht alle Ihre Hilfsmethoden, die von allen Ihren Helfer-Module zur Verfügung, um alle Ihre Ansichtenaber es tut nichts für Ihre Controller. Dies ist, weil die helper-Methoden sind entwickelt für den Einsatz in Aussicht und sollten generell nicht zugegriffen werden von Controllern. In neueren Versionen von Rails, diese option ist immer für jeden controller standardmäßig.InformationsquelleAutor der Antwort Adrian Dunston
Für Schienen 3, die
view_context
Methode im controller:Hier ein Beispiel: http://www.christopherirish.com/2011/10/13/no-view_context-in-rails-3-1-changes/
InformationsquelleAutor der Antwort B Seven
Zeit, wenn ich finde, dass dies am meisten nötig ist für das schreiben der flash-oder benutzerdefinierten Fehler-Dame. Es ist schön zu verwenden Dinge wie link_to Helfer in der flash-Nachricht unter bestimmten Umständen. Ich verwenden Sie die folgende Lösung, um ActionView Helfer in den controller. Beachten Sie, dass, wie oben erwähnt wurde, das bricht die MVC-Trennung, falls also jemand eine bessere Idee hat, lasst es mich wissen!
Unten ApplicationController hinzufügen:
und innerhalb der ApplicationController, fügen Sie
werden und schließlich in der Steuerung, wo Sie wollen, um den Zugriff auf die Helfer-code:
Hoffe, das hilft in irgendeiner Weise!
InformationsquelleAutor der Antwort Scott Miller
Ist es wahrscheinlich Reiniger zu verwenden, die Helfer Methode:
InformationsquelleAutor der Antwort Antonio Tapiador
Jeder Helfer kann zugegriffen werden, mithilfe von @template-Variablen in der Steuerung.
InformationsquelleAutor der Antwort BitOfUniverse
Controller keinen Zugriff auf Hilfsmethoden automatisch. Wir müssen Sie in-app-controller.
Modul ApplicationHelper
Ende
Klasse ApplicationController < ActionController::Base
Ende
InformationsquelleAutor der Antwort Nitin
Helfer sind zur Verwendung mit Vorlagen, dh. Ansichten, nicht im Controller. Das ist, warum Sie keinen Zugriff auf die Methode. Wenn Sie möchten, zu teilen, eine Methode, die zwischen zwei Steuerungen, Sie würde haben, Sie zu definieren, in ApplicationController, zum Beispiel. Helfer :alle sagt, dass jede Methode, definieren Sie in einem Helfer-Datei in app/helpers Verzeichnis verfügbar sein wird, um jede Vorlage.
InformationsquelleAutor der Antwort Milan Novota
Gibt es zwei Möglichkeiten: entweder erstellen Sie ein Modul oder die Verwendung von @template-Variablen. Check this out für mehr details
http://www.shanison.com/?p=305
InformationsquelleAutor der Antwort Shanison
Wenn Sie nur ApplicationHelper in Ihrem
app/helpers
Ordner als die, die Sie haben, um es zu laden in Ihrem controller mitinclude ApplicationHelper
. Standardmäßig Schienen nur laden Sie die helper-Modul, das den gleichen Namen wie der controller. (z.B. ArticlesController laden ArticlesHelper). Wenn Sie haben viele Modelle (z.B. Artikel; Beiträge; Kategorien), als Sie zum hochladen haben jeweils in Sie-controller. die docsHelfer
Beispiel Controller
InformationsquelleAutor der Antwort Papouche Guinslyzinho
Wenn Sie Ihren application_controller.rb-Datei auf diese...
...dann alle Helfer verfügbar sein wird, um alle Controller.
InformationsquelleAutor der Antwort I_do_python