0

ERB の 1 つのビューから、次のヘルパー コールがあります。

<p><%=progress @object.progress %></p>

これはヘルパー メソッドです (簡略化しました)。

def progress(value)
    s = content_tag(:span, "pre:")
    s += " <strong>#{value} %</strong>"
    return s.html_safe
end

この 2 種類の HTML 文字列をマージすると、最新の部分が正しく表示されないようです。次のように表示されます。

pre: <strong>40 %</strong>

文字列を次のように組み合わせると:

def progress(value)
    s = content_tag(:span, "pre:")
    s += content_tag(:strong, " #{value} %")
    return s.html_safe
end

すべてがうまくいきます!

4

3 に答える 3

1

content_tagとしてマークされたから文字列が返されたため、それが起こったと思いますhtml_safe。したがって、この文字列に何かを追加しようとすると、自動的にエスケープされます。

于 2012-07-19T18:59:26.757 に答える
1

から返される文字列はcontent_tagとしてマークされhtml_safeます。他の安全でない文字列を追加すると、連結の前にエスケープされます。

SafeBuffers (html_safe マジックを実行するクラス) がどのように機能するかについてのわかりやすい説明があります: http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/

于 2012-07-19T19:10:53.157 に答える
0

最初の例を使用している場合は、型変換のためにto_sを追加します。

于 2012-07-19T19:00:19.150 に答える