Je travaille toujours sur mon site de démonstration Rails 4 et je vois une chose étrange. Dans le contrôleur, il y a une ligne comme celle-ci:
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
Cela rend un message flash dans la page redirigée, ce qui est attendu. Cependant, la classe CSS attachée au message div est alert alert-notice
plutôt qu'une classe d'alerte Bootstrap valide, telle que alert-info
.
Où la classe est-elle définie pour ce flash et comment puis-je le personnaliser?
De plus, si je supprime un enregistrement via ajax, existe-t-il un moyen d'accéder au conteneur Flash principal pour afficher le message via js ou dois-je afficher/masquer mon propre message flash div uniquement pour les demandes ajax?
EDIT: mon Michael Hartl inspiré layouts/application.html.erb
:
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</div>
Merci!
EDIT 2:
Peut-être que je n'étais pas assez clair dans ma question initiale. Je comprends exactement comment la classe est définie dans l'objet flash dans ce cas. Je suis intéressé à apprendre à utiliser et à personnaliser le notice:
dans le bloc format.html
. Il semble qu'il devrait y avoir un moyen de passer une classe via cet avis? Ou n'est-ce pas une façon fondamentale de faire les choses?
Dans application.html.erb
, vous afficheriez les messages flash
.
Mettez à jour ce code comme ci-dessous
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, class: "alert alert-info" %>
<% end %>
Vous pouvez ajouter les classes que vous souhaitez appliquer au message flash dans l'option class
.
MODIFIER
La classe est configurée en tant que alert alert-notice
en raison de alert alert-<%= key %>
dans votre code . Lorsque vous appelez redirect_to @widget, notice: 'Widget was successfully created.
Un message flash serait ajouté dans la variable flash
avec la clé notice
et la valeur Widget was successfully created.
, i.e.
flash[:notice] = "Widget was successfully created."
EDIT # 2
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
notice: 'Widget was successfully created.'
est un argument passé à la méthode redirect_to
. Il est ajouté à flash
hash dans cette méthode.
Ajouter ceci à
class ApplicationController
add_flash_types :success, :warning, :danger, :info
end
et alors vous pouvez le faire dans vos contrôleurs
format.html { redirect_to @widget, success: 'Widget was successfully created.' }
à condition que vous l'avez fait dans vos mises en page
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</div>