2010-09-29 2 views
4

J'ai un DSL pour la configuration du contrôleur. La fonctionnalité sous-jacente repose sur before_filters. Pour éviter de définir le before_filter plus d'une fois, j'ai vraiment besoin de savoir si un before_filter est déjà défini dans un contrôleur Rails 3. Comme before_filter fonctionne différemment des variables de classe (héritage, rechargement de classe), je ne peux pas simplement définir une variable de classe à vérifier.Indiquer quels filtres_avant sont déjà définis dans Rails 3

Le fait de fouiller dans le nouveau code hautement abstrait des callbacks de AbstractController ne me donne aucune indication quant à la possibilité de le faire. Est-ce que j'ai vraiment besoin d'appeler skip_filter pour chaque appel DSL dans le contrôleur?

Répondre

10

Voici une manière que je trouvais de le faire:

noam$ rails c 

Loading development environment (Rails 3.0.3) 

ruby-1.9.2-p136 :001 > ApplicationController._process_action_callbacks.map {|c| c.filter if c.kind == :before}.compact 
=> [:deny_banned_user, :validate_session, :verify_authenticity_token, :require_user_login] 
ruby-1.9.2-p136 :002 > 
+0

ne peut se demander si ce serait une bonne chose de mettre en Rails lui-même ... –

+1

Works pour Rails 4.0.2. – Daniel

+0

Afficher tous les filtres aussi utiles (il pourrait y avoir "autour"): 'ApplicationController._process_action_callbacks.map {| c | met "# {c.kind} - # {c.filter}"} ' –

Questions connexes