私はRailsのcontent_tag
ヘルパーを使用してHTMLコードのブロックを構築しています。私が今直面している課題は、content_tag
によって生成されたHTML要素と配列のHTML文字列を結合することです。safe_joinとcontent_tagでhtml_safeを置き換える方法
RuboCop Rails/OutputSafetyを参照してください。例えば
:私は以下のようにhtml_safeのアプローチを使用している場合
options = ["<li>Three</li>", "<li>Four</li>", "<li>Five</li>"]
# This is code to generate blocks of HTML
out = []
out << content_tag(:ul,
content_tag(:li, "One") +
content_tag(:li, "Two") +
options.join(''),
:class => ["class_1", "class_2"])
safe_join(out)
# Expect result should be like
<ul class="class_1 class_2">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<li>Five</li>
</ul>
# Actual result
<ul class="class_1 class_2">
<li>One</li>
<li>Two</li>
"<li>Three</li><li>Four</li><li>Five</li>"
</ul>
しかし、それは動作します。
%{<ul>
<li>One</li>
<li>Two</li>
#{options.join('')}
</ul>
}.html_safe
何を変更する必要がありますか?
# New apporach
options = ["Three", "Four", "Five"]
out = []
out << content_tag(:ul,
content_tag(:li, "One") +
content_tag(:li, "Two") +
options.collect do |option|
content_tag(:li, "#{option[0]}")
end.join(""),
:class => ["class_1", "class_2"])
safe_join(out)
# New approach result
<ul class="class_1 class_2">
<li>One</li>
<li>Two</li>
"<li>Three</li><li>Four</li><li>Five</li>"
</ul>
safe_joinとcontent_tagヘルパーでhtml_safeに代わる代替より安全な方法を探している人のために。完全で記述的な解決法の答えを見てください。 – zihaow