16

I'm trying to customize the output of a simple_form association, basically I need to display a checkbox label on two lines. My idea was adding a "br" tag into the "label", but unfortunately it gets escaped so it display actually "br" instead of going to a new line

I use a lambda for customizing the label output

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

this produces an escaped br into the label string, how could I display the label on two lines?

Carlo
  • 1,184
  • 4
  • 15
  • 31

3 Answers3

32

call html_safe method on the string you want not to be escaped.

<%= f.association :item, :as => :check_boxes, :collection => current_user.items, :label => false, :label_method => lambda { |item| "#{item.city.capitalize},<br> #{item.address}".html_safe }%>
Manoj Monga
  • 3,033
  • 14
  • 19
  • 4
    Seems it's vulnerable to an XSS attack. You should have forced escaping on user input, i.e.: `"#{h item.city.capitalize},
    #{h item.address}".html_safe`
    – dskecse Oct 16 '14 at 10:22
  • This comment adds nothing useful, but thank you - a simple solution to an aggravating problem. – pjmorse Dec 28 '15 at 19:57
13

For those of you looking to have custom html in elements as the title of the OP's question suggests, you can do this:

= f.input(:Foo, label: "Foo <span>(Blah helper text blah)</span>".html_safe)
Pierre
  • 1,252
  • 1
  • 14
  • 24
2

Does html_safe help?

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

if not, then post an example app on github showcasing this issue, so we can debug it

CuriousMind
  • 33,537
  • 28
  • 98
  • 137