web-dev-qa-db-fra.com

rails 4 - avis flash

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?

24
user101289

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.

38
Kirti Thorat

Ajouter ceci à

app/controllers/application_controller.rb

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>
30
Sachin Mour