Rails 3和HTML从帮助程序中逃脱

时间:2012-07-17 19:36:01

标签: ruby-on-rails

从一个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

一切正常!

3 个答案:

答案 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 进行类型转换。