2013-02-03 7 views
11

Sto tentando di personalizzare l'output di un'associazione simple_form, in pratica ho bisogno di visualizzare un'etichetta di checkbox su due righe. La mia idea è stata l'aggiunta di un tag "br" in "etichetta", ma purtroppo viene sfuggito in modo da visualizzare in realtà "br" invece di andare a una nuova lineaRails: html personalizzato nell'etichetta simple_form

Io uso un lambda per personalizzare l'uscita dell'etichetta

<%= f.association :item, :as => :check_boxes, :collection => current_user.items, :label => false, :label_method => lambda { |item| "#{item.city.capitalize},<br> #{item.address}" }%> 

questo produce un br di escape nella stringa di etichette, come posso visualizzare l'etichetta su due righe?

risposta

27

chiamata di metodo html_safe sulla stringa che si desidera non essere sfuggito.

<%= f.association :item, :as => :check_boxes, :collection => current_user.items, :label => false, :label_method => lambda { |item| "#{item.city.capitalize},<br> #{item.address}".html_safe }%> 
+0

ringraziamento, che ha lavorato – Carlo

+0

Sei il benvenuto. :) –

+4

Sembra vulnerabile a un attacco XSS. Dovresti aver forzato l'escaping sull'input dell'utente, ad esempio: "# {h item.city.capitalize},
# {h item.address}". Html_safe' – dskecse

2

L'assistenza html_safe è html_safe?

<%= f.association(....).html_safe %> 

se non, quindi inviare un app esempio su github mostra questo problema, in modo che possiamo eseguire il debug

10

Per quelli di voi che cercano di avere HTML personalizzato in elementi come il titolo della domanda del PO suggerisce, si può fare questo:

= f.input(:Foo, label: "Foo <span>(Blah helper text blah)</span>".html_safe)