現在、application_helper.rb ファイルに簡単なメソッドがあります。これは、クリックするとフォームに新しいフィールドを追加するリンクを追加するように設計されています。次のようになります。
def link_to_add_fields(type, object_form_builder)
link_to type, "#", "data-partial" => h(render(:partial => type + '/form',
:locals => {type.singularize.to_sym => object_form_builder,
:form_actions_visible => false})),
:class => 'add_fields'
end
このコードに問題があります。つまり、data-partial
html 属性に追加する必要があるパーシャルがエスケープされています (おそらく、レンダリングされた html のどこかで引用符によって)。私はh()
これを防ぐべきだと理解していましたが、そうしていないようです。誰でもこれを回避する方法を提案できますか?
編集:html_safe
以下で説明する方法を使用してみましたが、役に立ちませんでした。次のようにして、なんとか脱出させることができました:
"data-partial" => "'" + render(:partial => type + '/form', :locals => {type.singularize.to_sym => object_form_builder, :form_actions_visible => false}) + "'"
しかし、これがどれほど安全かはわかりませんか?
編集 2: 一重引用符を使用したエスケープは良くありません - HTML をエスケープしますが、部分がレンダリングされるときに引用符を出力しますが、これは望ましくありません。パーシャルをレンダリングするときにhtmlを正常にエスケープする方法についてのアイデアをまだ探しています。