在Rails中构建html字符串时,比'.html_safe更好的方法?

时间:2012-05-18 19:09:56

标签: ruby-on-rails-3 html-safe

典型模式:

out = ''.html_safe # or ActiveSupport::SafeBuffer.new
out << content_tag(...) if foo
out << 'hello, 1 < 2' # will be escaped properly
out << content_tag(...) if bar

out

这很好用。是否有更好/更短/更好的方式,特别是调用''.html_safe

1 个答案:

答案 0 :(得分:0)

我不会赞成这一点,因为我认为这不是你想要的答案。但我认为无论如何我都会分享一些想法。

这实际上可能更难阅读,但我有兴趣看到基准测试结果与您问题中使用的实现结果。

out = "#{content_tag(...) if foo}" <<
      "hello, 1 < 2" <<
      "#{content_tag(...) if bar}"
out.html_safe

另外,我不熟悉html_safe如何知道最初设置与返回之前是否存在差异的内部结构。我猜测html_safe的初始设置会更快,因为你复制了一个零长度的字符串而不是一个可能很长的字符串,但是为了参数:

out = '' # or ActiveSupport::SafeBuffer.new
out << content_tag(...) if foo
out << 'hello, 1 < 2' # will be escaped properly
out << content_tag(...) if bar
out.html_safe

考虑到这一点,我会考虑从上面修改我的原始代码,甚至更进一步:

"#{content_tag(...) if foo}".html_safe <<
"hello, 1 < 2" <<
"#{content_tag(...) if bar}"

同样,不是很可读,但我想我会把它扔出去作为思考的食物。