42 votes

Garder le flash hash persistant à travers les redirections

Mon cas d'utilisation de base consiste à effectuer un traitement, définir flash[:notice], puis rediriger vers une nouvelle page. D'après ce que je peux dire, les redirections réinitialisent la balise flash (corrigez-moi si je me trompe). Existe-t-il un moyen d'obtenir une persistance ? L'utilisation de sessions n'est pas une option, et j'ai contourné le problème en utilisant des cookies, mais je pense qu'il doit y avoir une meilleure solution.

79voto

EmFi Points 18645

Le hachage flash persiste exactement pendant une redirection ou un rendu. Vous devriez donc être sûr avec les paramètres par défaut.

Si vous avez besoin de conserver le hachage flash pour une autre requête/redirection, vous pouvez appeler flash.keep.

flash.keep # garde tout le hachage flash pour une requête supplémentaire.
flash.keep(:notice) # garde juste flash[:notice] pour une requête supplémentaire.

1voto

sirclesam Points 211

Une chose à noter dans au moins Rails v3.2.1 est que le flash persistera à travers une redirection s'il n'est pas du tout référencé à travers au moins 1 redirection et recharger la même vue après. Ceci est un pseudo code de mon expérience récente :

def some_action

(code qui peut définir un indicateur pour rediriger 1 fois)

redirect_to action_path if(redirect_flag)
....
end

En exécutant ceci, le flash[:message] serait présent indépendamment de la redirection.

def some_action
logger.debug("Flash[:message] #{flash[:message]}")

(code qui peut définir un indicateur pour rediriger 1 fois)
redirect_to action_path if(redirect_flag)
....
end

Pendant le débogage avec le logger faisant référence à flash[], il n'apparaîtrait que lorsque la redirection ne se produit pas. Je pourrais voir que cela pourrait poser problème si vous ajoutiez une référence au flash avant une redirection et le perdiez par la suite pour aucune raison apparente.

Voir la documentation ruby ici (Méthode protégée de l'instance : Utiliser en bas de la page)

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