0

現在、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-partialhtml 属性に追加する必要があるパーシャルがエスケープされています (おそらく、レンダリングされた 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を正常にエスケープする方法についてのアイデアをまだ探しています。

4

1 に答える 1

4

.html_safeメソッドを試す

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})).html_safe,
                       :class => 'add_fields'
end
于 2012-08-27T14:21:54.320 に答える