从一个ERB视图,我有这个帮助电话:
<p><%=progress @object.progress %></p>
这是辅助方法(我简化了它):
def progress(value)
s = content_tag(:span, "pre:")
s += " <strong>#{value} %</strong>"
return s.html_safe
end
似乎如果合并这两种类型的HTML字符串,则最新的部分不能正确呈现。你会看到这个:
pre: <strong>40 %</strong>
如果你像这样组合字符串:
def progress(value)
s = content_tag(:span, "pre:")
s += content_tag(:strong, " #{value} %")
return s.html_safe
end
一切正常!
答案 0 :(得分:1)
我认为,它发生了,因为从content_tag
返回的字符串标记为html_safe
。因此,如果您尝试向此字符串添加内容,则会自动转义。
答案 1 :(得分:1)
从content_tag
返回的字符串标记为html_safe
,当您添加其他不安全的字符串时,它会在concat之前被转义。
以下是关于SafeBuffers(执行html_safe魔术的类)如何工作的一个很好的解释:http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/
答案 2 :(得分:0)
如果您使用的是第一个示例,请添加 to_s 进行类型转换。