web-dev-qa-db-fra.com

Comment afficher un Rails avis flash lors d'une redirection?

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?

56
at.

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é.

107
Rebitzele
redirect_to new_user_session_path, alert: "Invalid email or password"

au lieu de :alert vous pouvez utiliser :notice

afficher

34
Tauqeer Ahmad

Ou vous pouvez le faire en une seule ligne.

redirect_to check_in_path, flash: {notice: "Successfully checked in"}
16
etlds

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/

5
Jon Schneider

Cela fonctionnera aussi

redirect_to check_in_path, notice: 'Successfully checked in'

5
Seifer

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"             
2
Florencio Lugo