0

从 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

一切正常!

4

3 回答 3

1

content_tag我认为,它发生了,因为从标记为返回的字符串html_safe。因此,如果您尝试向此字符串添加内容,它会自动转义。

于 2012-07-19T18:59:26.757 回答
1

从返回的字符串content_tag被标记为html_safe,当您添加其他不安全的字符串时,它在 concat 之前被转义。

这是关于 SafeBuffers(执行 html_safe 魔法的类)如何工作的一个很好的解释:http: //yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/

于 2012-07-19T19:10:53.157 回答
0

如果您使用的是第一个示例,则添加to_s进行类型转换。

于 2012-07-19T19:00:19.150 回答