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

但没有骰子

提前谢谢

4

1 回答 1

4

当您在 Ruby on Rails 中连接字符串时,每个未标记为 html_safe 的字符串在连接之前首先被转义。

使用第二个片段,确保在每个字符串上调用 .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 回答