51 votes

before_filter n'annule pas l'action

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

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 cucumber/webrat ou d'un navigateur, et bien que le filtre soit appelé (je peux voir les puts sortir le message), la chaîne de filtrage n'est pas terminée.

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

9 votes

Vous avez probablement confondu avec la méthode active record before_xxx qui n'enregistre pas l'enregistrement lorsqu'elle renvoie une valeur fausse.

97voto

mu is too short Points 205090

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

Si un filtre avant rend ou redirige, l'action ne sera pas exécutée. Si d'autres filtres sont prévus pour s'exécuter après ce filtre, ils sont également annulés.

Le même texte figure dans le Guide 5.2.0 .

Ce comportement est logique, si la chaîne de filtrage n'est pas complète (c'est-à-dire qu'elle s'arrête en cours de route), vous finirez par appeler les méthodes du contrôleur alors que les choses ne sont pas configurées comme elles devraient l'être, ce qui causera de la douleur, de la souffrance et de la confusion, ce qui n'est pas du tout convivial ou amusant.

6 votes

Les exemples que j'ai étudiés effectuent une redirection et renvoient ensuite un message faux, et je me suis accroché à la partie "faux", qui s'est avérée être exactement la même. Tout cela est parfaitement logique - merci.

9 votes

@Henry : Ne vous sentez pas mal, je trouve que beaucoup de documentations Rails et Ruby sont un peu maigres sur ce genre de détails.

0 votes

@muistooshort Besoin d'aide. J'étais en train de passer par Modèles de conception et la plupart d'entre eux utilisant des Interface qui n'est pas le sujet de Ruby. Je ne suis donc pas en mesure de les comprendre. Des conseils pour les apprendre ? Je ne suis pas capable de les coder en Ruby. Les traductions ligne par ligne ne me semblent pas être une meilleure option. Merci de me conseiller.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X