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.
Réponses
Trop de publicités?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.
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)