1

典型的なパターン:

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ますか?

4

1 に答える 1

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}"

繰り返しますが、あまり読みやすいものではありませんが、考えの材料としてそこに投げ出そうと思いました.

于 2012-05-18T19:19:47.693 に答える