Ruby on Rails - 在这个例子中html_safe是如何工作的

时间:2013-11-02 07:12:37

标签: ruby-on-rails

在为嵌套字段处理一个简单的视图助手之后,我对使用html_safe感到困惑。

使用一个简单但无关紧要的例子来解释

#view helper
def add_link
    html = render "message"
    content_tag :a, "click me", 'data-html' => html
end

#message partial
<p class="blah" id="yo">hey how are you</p>

#js
$(document).ready ->
  $('a').click ->
    $(this).after($(this).data('html'))

#view
<%= add_link %>

在浏览器中,“click me”链接显示不正确,看起来像这样

嘿,你好吗? “&gt;点击我

之所以如此,是因为链接data-html属性正在存储消息部分的内容,其中有一些“因此它搞乱了html标记。

好的,我们可以通过转义部分

的内容来修复它

版本2

#view helper    
def add_link
    html = render "message"
    content_tag :a, "click me", 'data-html' => CGI.escapeHTML(html)
end

现在链接正确呈现。

但是当我点击它时,遗憾的是附加的html被转义,所以在浏览器中它看起来像这样

click me <p class="this is it">hey how are you</p>
在抨击我的头后,我想到了什么是地狱,并尝试附加html_safe而不真正理解为什么它会起作用。

版本3

#view helper    
def add_link
    html = render "message"
    content_tag :a, "click me", 'data-html' => CGI.escapeHTML(html).html_safe
end

并且低,看它在浏览器中工作

click me hey how are you

但是为什么!?!?!

我理解为什么我必须首先将CGI.escape_html部分内容 - 以避免不匹配“。

但是为什么在版本2中,当我点击链接时附加的html作为文本出现?为什么调用html_safe会修复它?

1 个答案:

答案 0 :(得分:1)

this link 对您的问题有详细的解释,希望它能清除一些图片......