web-dev-qa-db-fra.com

before_filter n'annule pas l'action

J'ai du mal à faire fonctionner les filtres avant dans une application Rails que j'ai récemment mise à niveau de 1.9 (?) Vers 2.3.11. Pour essayer de le déboguer, j'ai mis un before_filter dans un manette:

before_filter :false_filter

et ce qui suit dans application_controller.rb:

def false_filter
  puts "false filter running"
  false
end

J'appelle ensuite la méthode à partir de concombre/webrat ou d'un navigateur, et pendant que le filtre est appelé (je peux voir les mises en sortie du message), la chaîne de filtrage ne se termine pas.

Je me demande s'il y a du code passe-partout qui n'a pas été généré. Quelqu'un peut-il suggérer où chercher?

51
Henry Collingridge

Rien ne fait attention à la valeur de retour d'un filtre avant. Si vous voulez arrêter le traitement, vous devez rendre quelque chose à partir de votre filtre ou rediriger vers un autre endroit, du guide fin :

Si un filtre avant s'affiche ou redirige, l'action ne s'exécute pas. Si des filtres supplémentaires doivent être exécutés après ce filtre, ils sont également annulés.

Le même texte apparaît dans le guide 5.2. .

Ce comportement a du sens, si la chaîne de filtrage ne se termine pas (c.-à-d. Arrête de filtrer en cours de route), vous finirez par appeler des méthodes de contrôleur avec des choses qui ne sont pas configurées comme elles le prévoyaient et cela ne ferait que causer de la douleur , la souffrance et la confusion et ce ne serait pas du tout amical ou amusant.

96
mu is too short