J'ai le code suivant dans un Rails contrôleur:
flash.now[:notice] = 'Successfully checked in'
redirect_to check_in_path
Puis dans la vue/check_in:
<p id="notice"><%= notice %></p>
Cependant, l'avis ne s'affiche pas. Fonctionne parfaitement si je ne redirige pas dans le contrôleur:
flash.now[:notice] = 'Successfully checked in'
render action: 'check_in'
J'ai besoin d'une redirection cependant ... pas seulement d'un rendu de cette action. Puis-je avoir un avis flash après la redirection?
Supprimez le ".now". Alors écrivez juste:
flash[:notice] = 'Successfully checked in'
redirect_to check_in_path
Le fichier .now est spécifiquement censé être utilisé lorsque vous effectuez simplement un rendu et non une redirection. Lors de la redirection, le fichier .now ne doit pas être utilisé.
redirect_to new_user_session_path, alert: "Invalid email or password"
au lieu de :alert
vous pouvez utiliser :notice
afficher
Ou vous pouvez le faire en une seule ligne.
redirect_to check_in_path, flash: {notice: "Successfully checked in"}
Si vous utilisez Bootstrap, cela affichera un message flash bien formaté sur la page qui est la cible de votre redirection.
Dans votre contrôleur:
if my_success_condition
flash[:success] = 'It worked!'
else
flash[:warning] = 'Something went wrong.'
end
redirect_to myroute_path
A votre avis:
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
Cela produira du HTML comme:
<div class="alert alert-success">It worked!</div>
Pour les styles d'alerte disponibles Bootstrap, voir: http://getbootstrap.com/docs/4.0/components/alerts/
Référence: https://agilewarrior.wordpress.com/2014/04/26/how-to-add-a-flash-message-to-your-Rails-page/
Cela fonctionnera aussi
redirect_to check_in_path, notice: 'Successfully checked in'
J'ai eu le même problème, et votre question a résolu la mienne, car j'avais oublié d'inclure dans la vue/check_in:
<p id="notice"><%= notice %></p>
Dans le contrôleur, une seule ligne:
redirect_to check_in_path, :notice => "Successfully checked in"