1

html_safe とまだエスケープされた html

次の返信ヘルパーがあります。

def mb_reply_login post
  if current_user
    "<button data-depth='" + post.depth.to_s + "' data-post-id='" + post.id.to_s + "'  class='mb_btn mb_reply btn'>reply</button>".html_safe
  else
    ...
  end

次のようにビュー内から呼び出します。

<%=mb_reply_login post %>

しかし、これはエスケープされた html を返すため、なぜ混乱しているのでしょうか。Don't escape html in ruby​​ on railsと rails apiによると、そうすべきではないようです。

エスケープされていないhtmlを返すにはどうすればよいですか? 私は試した

"<button data-depth='" + post.depth.to_s.html_safe + "' data-post-id='" + post.id.to_s.html_safe + "'  class='mb_btn mb_reply btn'>reply</button>".html_safe

しかし、サイコロはありません

thx事前に

4

1 に答える 1

4

Ruby on Rails で文字列を連結する場合、html_safe としてマークされていないすべての文字列は、連結する前に最初にエスケープされます。

2 番目のスニペットを使用して、すべての文字列 (次のような定数を含む) で .html_safe を呼び出すようにしてください。

"<button data-depth='"

さらに良いことに、次のような補間を使用できます。

"<button data-depth='#{post.depth.to_s.html_safe}' 
 data-post-id='#{post.id.to_s.html_safe}' 
 class='mb_btn mb_reply btn'>reply</button>".html_safe
于 2013-01-07T20:46:10.683 に答える