Was nähern nehmen Sie Links in Flash-Mitteilungen Einbettung?
-
19-09-2019 - |
Frage
Die Fähigkeit, Flash-Mitteilungen zu haben (man beachte, Fehler, Warnung, etc.) mit eingebetteten Links ist schön, von einem Benutzer-Interaktion Standpunkt. Allerdings Einbetten einen Anker-Tages in einer Flash-Mitteilung von der Steuerung ist verschmutzt.
Nehmen wir an, dass ein Flash-Meldung wie diese gut für die Benutzerfreundlichkeit ist *:
Beispiel Flash-Nachricht Hinweis mit einem eingebetteten Link http://img.skitch.com/20090826- xbsa4tb3sjq4fig9nmatakthx3.png (entlehnt von DailyMile.com )
Was Taktik würden Sie nehmen zwischen dem Controller und Ansicht zu verwenden, so etwas wie diese sauber?
Lösung
Ich dachte, ich würde das Produkt gemeinsam nutzen, da Antwort findet ich suchte anderswo:
Arbeiten auf Schienen 3.1
flash[:notice] = "Proceed to #{view_context.link_to('login page', login_path)}".html_safe
Andere Tipps
Glenn Gillen einen Ansatz hat, dass er es nennt Nützliche Flash-Mitteilungen in Rails .
Ich änderte seinen Code-Schnipsel ein wenig mehr idiomatische zu sein (für mich zumindest).
Der Regler füllt den Blitz wie folgt aus:
flash[:notice] = "Your profile was updated. %s"
flash[:notice_item] = ["Edit again?", edit_profile_path(@profile)]
Sie könnten dann Helfer haben, dass in etwa so aussehen:
def render_flash_messages(*keys)
messages = keys.collect do |key|
content_tag(:p, flash_message_with_item(key), :class => "flash #{key}") if flash[key]
end.join
content_tag(:div, messages, :id => "flash_messages") unless messages.blank?
end
def flash_message_with_item(key)
item = flash["#{key}_item".to_sym]
substitution = item.is_a?(Array) ? link_to(*item) : item
flash[key] % substitution
end
Der Blick sieht einfach wie folgt aus:
<%= render_flash_messages(:error, :notice, :warning) %>
Die Ansicht (über den flash_message_with_item
Helfer) ist verantwortlich für die Anker-Tag zu schaffen, aber der Controller verwaltet, was in den Flash-Nachricht geht für das weitere Vorgehen eine optionale Ressource enthält.
Sie können eine Hilfsmethode erstellen partials machen basierend auf dem Wert in der Flash-Nachricht übergeben zurück.
Dies ist ähnlich wie link_to () in Rails blinken
# In your controller
flash[:error] = render_to_string(:partial => "sessions/login_failed_message")
# In sessions/_login_failed_message.html.erb
Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}