Quale approccio si fa a prendere per l'incorporamento collegamenti nei messaggi flash?

StackOverflow https://stackoverflow.com/questions/1332013

  •  19-09-2019
  •  | 
  •  

Domanda

La possibilità di avere messaggi istantanei (avviso, errore, di avvertimento, ecc) con link incorporati è bello dal punto di vista interazione con l'utente. Tuttavia, incorporando un tag di ancoraggio all'interno di un messaggio flash dal controller è sporca.

Supponiamo che un messaggio flash come questo è un bene per l'usabilità *:

Esempio Flash Messaggio Avviso con un collegamento incorporato http://img.skitch.com/20090826- xbsa4tb3sjq4fig9nmatakthx3.png (preso in prestito da DailyMile.com )

Che tattica vorresti prendere tra il controller e la vista di impiegare qualcosa di simile in modo pulito?

È stato utile?

Soluzione

solo pensato che avrei condiviso questo, dal momento che la risposta trovato che stavo cercando altrove:

Funziona su rotaie 3.1

flash[:notice] = "Proceed to #{view_context.link_to('login page', login_path)}".html_safe

Altri suggerimenti

Glenn Gillen ha un approccio che chiama utili I messaggi flash in Rails .

ho modificato i suoi frammenti di codice per essere un po 'più idiomatica (almeno per me).

Il controller riempie il flash in questo modo:

flash[:notice]      = "Your profile was updated. %s"
flash[:notice_item] = ["Edit again?", edit_profile_path(@profile)]

È quindi potrebbe avere aiutanti che sembrano qualcosa di simile:

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

Il punto di vista appare semplicemente come questo:

<%= render_flash_messages(:error, :notice, :warning) %>

La vista (tramite l'helper flash_message_with_item) è responsabile della creazione del tag di ancoraggio, ma il controller gestisce ciò che accade nella messaggio flash tra cui una risorsa facoltativa per ulteriori azioni.

È possibile creare un metodo di supporto per il rendering di parziali in base al valore passato di nuovo nel messaggio flash.

Questo è simile a () in Rails Flash

# 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)}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top