Ich arbeite immer noch an meiner Rails 4-Demo-Site und sehe etwas Seltsames. In der Steuerung hat es eine Zeile wie folgt:
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
Dadurch wird auf der umgeleiteten Seite eine Flash-Nachricht angezeigt, die erwartet wird. Die an die Message div angehängte css-Klasse ist jedoch alert alert-notice
und nicht eine gültige Bootstrap-Alert-Klasse wie alert-info
.
Wo wird die Klasse für dieses Flash festgelegt und wie kann ich es anpassen?
Wenn ich einen Datensatz über ajax lösche, gibt es eine Möglichkeit, auf den Core-Flash-Container zuzugreifen, um die Nachricht über js anzuzeigen, oder muss ich meine eigene Flash-Nachricht div nur für Ajax-Anforderungen anzeigen/verbergen?
EDIT: mein Michael Hartl inspirierte layouts/application.html.erb
:
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</div>
Vielen Dank!
EDIT 2:
Vielleicht war ich in meiner ursprünglichen Frage nicht klar genug. Ich verstehe genau, wie die Klasse in diesem Fall im Flash-Objekt festgelegt wird. Ich bin daran interessiert, zu lernen, wie der notice:
im format.html
-Block verwendet und angepasst werden kann. Es scheint, dass es eine Möglichkeit geben sollte, eine Klasse über diese Benachrichtigung zu bestehen. Oder ist dies nicht eine grundlegende Vorgehensweise von Rails?
In application.html.erb
würden Sie die flash
-Meldungen anzeigen.
Aktualisieren Sie diesen Code wie folgt
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, class: "alert alert-info" %>
<% end %>
Sie können die Klassen, die Sie auf die Flash-Nachricht anwenden möchten, mit der Option class
hinzufügen.
EDIT
Die Klasse ist wegen alert alert-notice
in Ihrem Code als alert alert-<%= key %>
eingerichtet. Wenn Sie redirect_to @widget, notice: 'Widget was successfully created.
aufrufen
Eine Flash-Nachricht würde in flash
hash mit dem Schlüssel als notice
und dem Wert als Widget was successfully created.
hinzugefügt, d. H.
flash[:notice] = "Widget was successfully created."
BEARBEITEN # 2
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
notice: 'Widget was successfully created.'
ist ein Argument, das an die redirect_to
-Methode übergeben wird. Es wird in dieser Methode zu flash
hash hinzugefügt.
Fügen Sie dies zu
class ApplicationController
add_flash_types :success, :warning, :danger, :info
end
und dann können Sie dies in Ihren Controllern tun
format.html { redirect_to @widget, success: 'Widget was successfully created.' }
sofern Sie dies in Ihren Layouts getan haben
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</div>
Wenn Sie sich nicht mit Ihrem ApplicationController
anlegen möchten, wie @Sachin Mour es angibt, können Sie einfach einige zusätzliche CSS-Klassen hinzufügen:
im app/assets/stylesheets/custom.scss
:
/*flash*/
.alert-error {
background-color: #f2dede;
border-color: #eed3d7;
color: #b94a48;
text-align: left;
}
.alert-alert {
background-color: #f2dede;
border-color: #eed3d7;
color: #b94a48;
text-align: left;
}
.alert-success {
background-color: #dff0d8;
border-color: #d6e9c6;
color: #468847;
text-align: left;
}
.alert-notice {
background-color: #dff0d8;
border-color: #d6e9c6;
color: #468847;
text-align: left;
}
Schritt für Schritt Anleitung, wie man Flash-Nachrichten mit Gerät und Bootstrap anpackt, finden Sie unter hier