2012-07-03 14 views
16

Sto cercando di arrivare a questo lavoro:link_to in helper con blocco

link_to("#", class: "add_fields btn btn-success") do 
    name 
    content_tag(:i, "", :class => "icon-plus icon-white") 
end 

ma mi mostra solo l'icona specificata da i (Twitter-bootstrap css) e non il testo in name, che cosa sono Sto sbagliando?

risposta

26

Il valore di ritorno del blocco diventa il suo contenuto. Viene restituita solo l'ultima riga.

È necessario concatenare le due stringhe insieme + per produrre un singolo valore di ritorno:

link_to("#", class: "add_fields btn btn-success") do 
    name + content_tag(:i, "", class: "icon-plus icon-white") 
end 

Avrete bisogno di usare html_safe per evitare che il contenuto del tuo tag da automaticamente in fase di codifica HTML:

link_to("#", class: "add_fields btn btn-success") do 
    name + content_tag(:i, "", class: "icon-plus icon-white").html_safe 
end 

Parlando per esperienza personale con Twitter Bootstrap, so che avrete bisogno di uno spazio tra name e content_tag:

link_to("#", class: "add_fields btn btn-success") do 
    name + ' ' + content_tag(:i, "", class: "icon-plus icon-white").html_safe 
end 

In alternativa, se si è all'interno di un modello di ERB, è possibile emettere entrambi i valori con <%=:

<%= link_to(...) do %> 
    <%= name %> 
    <%= content_tag(...) %> 
<% end %> 
+0

se sto facendo questo i miei pulsante mostra: 'foo ' – wintersolutions

+0

È possibile utilizzare sicuro HTML per contrassegnare le stringhe da non richiedere la codifica HTML. – meagar

+4

Anch'io l'ho provato con html_safe e non ha funzionato, ma funziona: 'link_to (" # ", classe:" add_fields btn btn-success ") do (nome + '' + content_tag (: i," ", : class => "icon-plus icon-white")). html_safe fine' se vuoi puoi aggiornare la tua risposta, grazie mille! – wintersolutions

2

Ci sono due cose che mi piacerebbe prendere in considerazione:

1) L'intero contenuto del il blocco link_to deve essere disinfettato.

link_to("#", class: "add_fields btn btn-success") do 
    (name + content_tag(:i, "", class: "icon-plus icon-white")).html_safe 
end 

2) Possiamo aspettarci di ingresso per essere nil?

Le cose si interrompono se si chiama html_safe su un oggetto nil. Utilizzare raw se esiste la possibilità che ciò accada.

link_to("#", class: "add_fields btn btn-success") do 
    raw(name + content_tag(:i, "", class: "icon-plus icon-white")) 
end 

This è una buona lettura sul tema. My blog post presenta un'interessante applicazione di questo.

1

Per quelli che usano font-fantastico o qualcos'altro potrebbe non mostrare l'icona. Ma questa soluzione ha funzionato.

link_to :sort => column, :direction => direction do 
    "#{title} #{content_tag(:i, "", class: "fa fa-chevron-up") }".html_safe 
end