Domanda

Voglio essere in grado di passare più messaggi all'hash flash, all'interno del mio controller, e farli visualizzare bene insieme, ad esempio, in una lista proiettata. Il modo in cui ho ideato per farlo è quello di creare una funzione di supporto nel mio controller dell'applicazione, che forma un array in un elenco proiettato, che poi passerò, nel mio caso, flash [: successo]. Questo non è chiaramente il modo di Rails perché, IA, la mia lista proiettata viene codificata. Cioè, invece di ottenere:

  • Messaggio 1
  • Messaggio 2

Ottengo:

u003Cul>u003Cli>Messaggio 1u003C/li>u003Cli> Messaggio 2u003C/li>u003C/ul>

Sono sicuro che potrei trovare un modo per RAW () l'output, ma non c'è un modo semplice per far funzionare qualcosa di simile? Forse c'è un'opzione da passare a Flash []? Qualcos'altro?

È stato utile?

Soluzione

ero solito render_to_string E un parziale anziché un aiutante per ottenere qualcosa di simile.

# app/controller/dogs_controller.rb
def create
  @dog = Dog.new(params[:dog])
  @messages=[]
  if @dog.save
    @messages << "one"
    @messages << "two"
    flash[:notice] = render_to_string( :partial => "bulleted_flash")
    redirect_to(dogs_path)
  else
    render :action => 'new
  end
end

Quindi formatto l'array di messaggi flash in un elenco HTML

# app/views/dogs/_bulleted_flash.html.erb
<ol>
  <% @messages.each do |msg| %>
  <li><%= msg %></li>
  <% end %>
</ol>

Che produce il seguente HTML

# http://0.0.0.0:3000/dogs
<body>
  <div id="flash_notice">
    <ul>
      <li>one</li>
      <li>two</li>
    </ul>
  </div>
  ...
</body>

Se hai bisogno di continuare a utilizzare un aiutante, penso che tu debba aggiungere il html_safe Metodo alla stringa per impedirgli di codificare (che Rails 3 fa per impostazione predefinita). Ecco un Domanda che mostra come usare html_safe in modo simile

Altri suggerimenti

Se stai usando Rails3, prova il metodo grezzo.

raw(my_html_string)

E non sfuggirà all'HTML. Oh, scusa, ho appena letto la tua ultima frase. Dai un'occhiata a queste informazioni, "Problemi di messaggi Flash Rails 3", sembra che potrebbe essere quello che stai cercando:

http://www.ruby-forum.com/topic/215108

Di solito chiederei maggiori informazioni sulle tue opinioni e layout in questa situazione, perché le impalcature non vengono visualizzate flash[:success] Per impostazione predefinita.

Il modo in cui lo risolvo è rifare totalmente i miei messaggi flash di solito, creando il flash[:whatever] un array ogni volta e nel mio layout che gestisce quell'array invece di solo l'avviso. Ricorda che Flash è solo un hash, stai solo impostando i valori.

Tuttavia, se vuoi solo farlo con la configurazione che hai ora (Helper che mette l'HTML all'interno del flash[:success]), è possibile modificare il modo in cui i messaggi flash vengono visualizzati nel file di layout. Per impostazione predefinita, sono solo usati <%= flash[:success] %>, che sfugge automaticamente a HTML. Per farlo non farlo per i messaggi flash, cambiarlo in <%=raw flash[:success] %>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top