Pourquoi puis-je accéder aux méthodes d'assistance pour un contrôleur dans les vues d'un contrôleur différent? Existe-t-il un moyen de désactiver cela sans pirater / patcher les Rails?
ruby-on-rails
ruby
helpers
Nate Smith
la source
la source
Réponses:
La méthode de @George Schreiber ne fonctionne pas depuis Rails 3.1; le code a considérablement changé.
Cependant, il existe maintenant un moyen encore meilleur de désactiver cette fonctionnalité dans Rails 3.1 (et, espérons-le, plus tard). Dans votre config / application.rb, ajoutez cette ligne:
Cela empêchera ApplicationController de charger tous les helpers .
(Pour toute personne intéressée, voici la pull request où la fonctionnalité a été créée .)
la source
La réponse dépend de la version de Rails.
Rails> = 3,1
Modifiez la
include_all_helpers
configuration enfalse
dans n'importe quel environnement où vous souhaitez appliquer la configuration. Si vous souhaitez que la configuration s'applique à tous les environnements, modifiez-laapplication.rb
.Lorsqu'il est faux, il ignorera l'inclusion .
Rails <3.1
Supprimer la ligne suivante de
ApplicationController
De cette façon, chaque contrôleur chargera ses propres assistants.
la source
include HelperName
en haut de votre ApplicationHelper.Dans Rails 3,
actioncontroller/base.rb
(autour de la ligne 224):Donc oui, si vous dérivez votre classe
ActionController::Base
, tous les assistants seront inclus.Pour contourner ce problème, appelez
clear_helpers
(AbstractClass::Helpers
; inclus dansActionController::Base
) au début du code de votre contrôleur. Commentaire sur le code source pour clear_helpers:Par exemple:
la source
clear_helpers
les dommages (de performance) ont déjà été causés puisque tous les helpers ont été chargés. Vous voulez vraiment utiliserconfig.action_controller.include_all_helpers = false
(comme l'indique @Craig Walker, ci-dessus), car cela empêche les helpers d'être chargés en premier lieu, vous permettant ainsi de gagner en performances (peut-être plus significativement en mode développement). Merci d'avoir inclus l'actioncontroller/base.rb
extrait; c'est toujours agréable de voir le code et de supprimer une partie du mystère.clear_helpers
est toujours utile pour les rails 3.0 -config.action_controller.include_all_helpers = false
est seulement les rails 3.1 et plus.En fait, dans Rails 2 , la fonctionnalité par défaut d'ActionController :: Base était d'inclure tous les helpers.
Changeset 6222 le 24/02/07 20:33:47 (il y a 3 ans) par dhh : Faites-en l'hypothèse par défaut que vous voulez tous les assistants, tout le temps (ouais, ouais)
changement:
À partir de Rails 3 beta 1, ce n'est plus le cas comme indiqué dans le CHANGELOG:
la source