html_safe仍然转义为html

时间:2013-01-07 20:35:09

标签: ruby-on-rails

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

但没有骰子

事先提前

1 个答案:

答案 0 :(得分: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