5.7 Flash-Messages 

Wenn wir einen neuen Bookmark anlegen, einen vorhandenen ändern oder einen Bookmark löschen, haben wir definiert, dass, wenn die Aktion erfolgreich war, die Index-Seite angezeigt werden soll. Schön wäre aber doch, wenn eine Bestätigungsmeldung ausgegeben würde, die dem Benutzer mitteilt, dass die Aktion erfolgreich war.
Dazu gibt es in Rails sogenannte Flash-Messages, die vom Controller gesteuert werden. Eine Flash-Message ist ein Hash, der nur für eine Anfrage gültig ist und danach wieder gelöscht wird. Dies hat also nichts mit dem Adobe-Flash-Format zu tun.
Um an der Oberfläche Bestätigungsmeldungen oder Notizen auszugeben, wird die Flash-Message (flash[:notice]) genutzt. Wir geben eine Flash-Message für die Actions create, update und destroy an. Flash-Messages müssen immer vor einem redirect angegeben werden:
Listing app/controllers/bookmarks_controller.rb
... def create @bookmark = Bookmark.new(params[:bookmark]) if @bookmark.save flash[:notice] = "Favorit wurde erfolgreich angelegt." redirect_to :action => "index" else render :action => "new" end end def update @bookmark = Bookmark.find(params[:id]) if @bookmark.update_attributes(params[:bookmark]) flash[:notice] = "Favorit wurde erfolgreich geändert." redirect_to :action => "index" else render :action => "edit" end end def destroy @bookmark = Bookmark.find(params[:id]) @bookmark.destroy flash[:notice] = "Favorit wurde erfolgreich gelöscht." redirect_to :action => "index" end
Flash-Message ausgeben
Damit die Flash-Messages auch angezeigt werden, müssen wir sie in den entsprechenden Views ausgeben. Da wir unsere Messages immer auf der Index-Seite anzeigen wollen, können wir das in dem View index.html.erb machen. Für den Fall, dass wir irgendwann einmal auch in anderen Views eine Flash-Message ausgeben wollen, können wir die Ausgabe auch in der application.html.erb vornehmen, da diese für alle Views gültig ist:
Listing app/views/layouts/application.html.erb
...
<body>
<div id="container">
<div id="header">
<h1>Meine Linksammlung</h1>
</div>
<div id="content">
<%= flash[:notice] %>
<%= yield %>
</div>
</div>
</body>
...
Flash-Message formatieren
Wenn Sie die Ausgabe der Flash-Message formatieren möchten, können Sie einen Bereich um die Message herum setzen, den Sie dann in der CSS-Datei formatieren können. Wir haben dafür zwei Klassen, flash und notice, in unserer CSS-Datei angelegt. Das heißt, wir müssen nur noch in der application.html.erb den Bereich anlegen und eine Abfrage ergänzen, ob eine Flash-Message gesetzt ist, damit nur dann dieser Bereich angezeigt wird:
Listing app/views/layouts/application.html.erb
<body>
<div id="container">
<div id="header">
<h1>Meine Linksammlung</h1>
</div>
<div id="content">
<% if flash[:notice] %>
<div class="flash notice">
<%= flash[:notice] %>
</div>
<% end %>
<%= yield %>
</div>
</div>
</body>
Wenn Sie jetzt zum Beispiel einen Eintrag löschen, wird die formatierte Flash-Message ausgegeben:
Abbildung Ausgabe formatierte Flash-Message
Fehlermeldungen
Sie können auch Fehlermeldungen als Flash-Message ausgeben. Die Syntax lautet:
flash[:error] = "Fehlertext"
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.