我怎样才能让rails无法将转义引号呈现为\"

Jam*_*mes 6 javascript ruby-on-rails actionview

在我的布局中我有

<% @current_user.popups.each do |p| %>
  <% content_for :script do %>
    <%= "$(document).ready ( function() { $.jGrowl(\"#{p.message}\", { sticky: true }) });" %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后在我的脚本部分

<%= yield :script %>
Run Code Online (Sandbox Code Playgroud)

问题是,这会呈现转义的报价,\&quot;而javascript不喜欢这样.

我怎么能阻止这种情况发生?或者还有另一种方法吗?我不能使用单引号,因为我想在消息中有一些html.我很感激任何帮助.

Dan*_*ley 11

你在使用Rails 3吗?在Rails 3中,默认情况下,html 转义是完成的,你必须每次都绕过它,如下所示:jdl上面有正确的想法,但听起来你仍然有问题.

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

但更好的方法是通过rails提供的帮助程序来运行它:escape_javascript所以转义回车和引号

像这样:

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