如何使Rails不将转义引号渲染为\"

8
在我的布局中,我有:
<% @current_user.popups.each do |p| %>
  <% content_for :script do %>
    <%= "$(document).ready ( function() { $.jGrowl(\"#{p.message}\", { sticky: true }) });" %>
  <% end %>
<% end %>

然后在脚本部分,我有以下内容

<%= yield :script %>

问题在于这会将转义的引号渲染为\&quot;,而javascript不支持这种写法。
我该如何阻止这种情况发生?还是说有其他方法可以解决?我不能使用单引号,因为我想在消息中添加一些html。非常感谢您的帮助。
2个回答

12

你是否正在使用Rails 3?在Rails 3中,默认情况下会进行html转义,每次必须像以下这样绕过它:jdl的想法是正确的,但似乎你仍然有问题。

<% content_for :script do %>
  $(document).ready ( function() { $.jGrowl("<%= raw(p.message) %>", { sticky: true }) });
<% end %>

但更好的做法是通过 Rails 提供的辅助方法 escape_javascript 进行处理,这样可以转义回车和引号。

就像这样:

$(document).ready ( function() { $.jGrowl("<%= raw(escape_javascript(p.message)) %>", { sticky: true }) });

如果jdl的答案可以正常工作,我仍然建议使用escape_javascript助手来转义引号和换行符。 - Daniel Beardsley
谢谢,我需要这样做来在消息中插入HTML。 - James
我喜欢这个答案,所以我删除了我的。 - jdl

1
尝试在视图中将 .html_safe 添加到您的字符串中。
<%= "$(document).ready ( function() { $.jGrowl(\"#{p.message.html_safe}\", { sticky: true }) });" %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接