1
私のRubyアプリケーションでは、ネストされたコメントをレンダリングするために再帰を使用する必要があります。ビュー内のヘルパーを使用するとHTMLがエスケープされますか?
このため、レンダリングをヘルパーの関数にオフロードすることに決めました。
機能の基本的な構造は次のようにされています
def display_comments(tree)
to_render = ""
to_render << render({:partial => 'comment', :locals => {:body => tree[:body]}})
tree[:children].each do |child|
to_render << display_comment(child)
end
return to_render
end
と私はこのようにそれを呼び出すビューで:
<% if comment_forest.length > 0 %>
<% comment_forest.each do |tree| %>
<%= display_comments(tree)
<% end %>
<% end %>
しかし、Webページ上で、レールは、すべてのHTMLをエスケープし、それはこのように見える終わる:
涼しい、それは働いた!驚くべきことに、レールはまだユーザから入力された情報からhtmlを逃れました。この魔法は何ですか? :O –
実際には、ユーザーの入力データは、表示されていないときに保存されたときにエスケープされている可能性があります。正しい? –
Katzによると、安全な文字列を安全でない文字列に連結すると、安全でない文字列が最初にエスケープされます。これはおそらくここで起こっていることです。 – sczizzo