2010-10-29 5 views
22

Ich benutze flash [: error], um Benutzern eine einfache Nachricht anzuzeigen, dass sie unter bestimmten Bedingungen keinen Löschvorgang durchführen können. Ich habe auch einen Link, der ihnen hilft, Informationen über die Entität zu erhalten, die sie löschen wollten und warum sie dies nicht tun können.Verwendung von HTML in Rails-Flash-Nachrichten

Ist es ratsam, diesen Hyperlink in die Flash-Nachricht aufzunehmen? Was würde bedeuten, dass ich ein HTML-Fragment in meinem Controller hätte. Wenn nicht, wie würde ich das tun?

+5

Wäre nett, wenn der Downvote erklärt worden wäre! * seufz * –

Antwort

38

Wenn Sie einen Link in Ihre Flash-Mitteilung von der Steuerung gibt es zwei Fragen enthalten sein sollen. Den Link generieren und dann als HTML anzeigen lassen.

Um den Helfer link_to im Controller zu verwenden, qualifizieren Sie ihn vollständig.

Um die Zeichenfolge als HTML anzeigen zu lassen (anstatt maskiert zu werden), rufen Sie die Methode html_safe in der Zeichenfolge auf. So könnte die Zeile in Ihrem Controller aussehen:

flash[:error] = "You can't do that. #{ActionController::Base.helpers.link_to "Here's why.", '/more_info.html'}".html_safe 
+0

aus irgendeinem Grund, wenn ich .html_safe auf meine Flash-Nachricht verwende, rendern sie nicht das nächste Mal um –

+1

Was meinst du mit "next time round"? Flash-Nachrichten werden bei nachfolgenden Anforderungen im Allgemeinen nicht gerendert. – Ritchie

+0

Ab Rails 4.1 wird dies nicht funktionieren. – 0112

0

Sie können. Sie können auch einen Helfer in Ihrem Controller hinzufügen.

Oder Sie können es durch i18n System tun.

11

Das Flash-Objekt ist ein Halter zum Speichern von Ansichtsfragmenten/Nachrichten und behält sie für eine Umleitung mit der Sitzung bei. Ich sehe absolut kein Problem beim Speichern eines Links oder besser einer URL.

Beispiel:

redirect_to posts_path, :alert => "You cannot do that", :flash => { :url => post_path(@post) } 

und in der Layout-Ansicht, die üblichen Verdächtigen:

- if flash[:alert] 
    ... 
    - if flash[:url] 
    = link_to "blah blah", flash[:url] 
Verwandte Themen