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?

War es hilfreich?

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)}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top