webentwicklung-frage-antwort-db.com.de

schienen 4 - Flash Hinweis

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?

24
user101289

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.

38
Kirti Thorat

Fügen Sie dies zu

app/controller/application_controller.rb

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

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

1
w1t3k