Rails - 将自定义HTML添加到simple_form标签中

16

我正在尝试自定义simple_form的关联输出,基本上我需要在两行中显示一个复选框标签。我的想法是在“label”中添加一个“br”标记,但不幸的是它被转义了,因此实际上显示为“br”,而不是换到新行。

我使用lambda自定义标签输出。

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

这会在标签字符串中产生一个转义的换行符,我该如何将标签显示在两行?

3个回答

32

在您不希望进行转义的字符串上调用html_safe方法。

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

5
似乎它容易遭受 XSS 攻击。你应该对用户输入施加强制转义,例如:"#{h item.city.capitalize},<br> #{h item.address}".html_safe - dskecse
这个评论并没有提供任何有用的内容,但是感谢你——一个简单的解决方法来解决令人恼火的问题。 - pjmorse

13

对于那些想要在标题元素中使用自定义HTML的人,可以这样做:

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

2

html_safe 有用吗?

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

如果没有的话,请在github上发布一个展示此问题的示例应用程序,以便我们进行调试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接