Warum kann ich in den Ansichten für einen anderen Controller auf Hilfsmethoden für einen Controller zugreifen? Gibt es eine Möglichkeit, dies zu deaktivieren, ohne Rails zu hacken / zu patchen?
ruby-on-rails
ruby
helpers
Nate Smith
quelle
quelle
Antworten:
Die Methode von @George Schreiber funktioniert ab Rails 3.1 nicht mehr. Der Code hat sich erheblich geändert.
Es gibt jedoch jetzt eine noch bessere Möglichkeit, diese Funktion in Rails 3.1 (und hoffentlich später) zu deaktivieren. Fügen Sie in Ihrer config / application.rb folgende Zeile hinzu:
Dadurch wird verhindert, dass ApplicationController alle Helfer lädt .
(Für alle Interessierten gibt es hier die Pull-Anfrage, bei der die Funktion erstellt wurde .)
quelle
Die Antwort hängt von der Rails-Version ab.
Schienen> = 3.1
Ändern Sie die
include_all_helpers
Konfigurationfalse
in eine Umgebung, in der Sie die Konfiguration anwenden möchten. Wenn die Konfiguration auf alle Umgebungen angewendet werden soll, ändern Sie sie inapplication.rb
.Wenn false, wird die Aufnahme übersprungen .
Schienen <3.1
Löschen Sie die folgende Zeile aus
ApplicationController
Auf diese Weise lädt jeder Controller seine eigenen Helfer.
quelle
include HelperName
oben in Ihrem ApplicationHelper hinzufügen .In Schienen 3
actioncontroller/base.rb
(um Linie 224):Also ja, wenn Sie Ihre Klasse ableiten
ActionController::Base
, werden alle Helfer einbezogen.Um dies zu umgehen, rufen Sie am Anfang des Codes Ihres Controllers auf
clear_helpers
(AbstractClass::Helpers
; enthalten inActionController::Base
). Quellcode-Kommentar für clear_helpers:Z.B:
quelle
clear_helpers
den (Leistungs-) Schaden aufrufen, ist er bereits angerichtet, da alle Helfer geladen wurden. Sie möchten es wirklich verwendenconfig.action_controller.include_all_helpers = false
(wie oben in @Craig Walker angegeben), da es verhindert, dass die Helfer überhaupt geladen werden, wodurch Sie eine gewisse Leistung erzielen (möglicherweise am bedeutendsten im Entwicklungsmodus). Vielen Dank, dass Sie dasactioncontroller/base.rb
Snippet hinzugefügt haben. Es ist immer schön, Code zu sehen und einige der Rätsel zu lösen.clear_helpers
ist immer noch nützlich für Schienen 3.0 -config.action_controller.include_all_helpers = false
ist nur Schienen 3.1 und höher.In Rails 2 bestand die Standardfunktionalität von ActionController :: Base darin, alle Helfer einzuschließen.
Änderungssatz 6222 am 24.02.07 20:33:47 (vor 3 Jahren) von dhh : Machen Sie eine Standardannahme, dass Sie immer alle Helfer wollen (yeah, yeah)
Veränderung:
Ab Rails 3 Beta 1 ist dies nicht mehr der Fall, wie im CHANGELOG angegeben:
quelle