Как я могу получить рельсы, чтобы не отображать кавычки как \ " - PullRequest
6 голосов
/ 18 мая 2010

В моем макете у меня есть

<% @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 ]

11 голосов
/ 18 мая 2010

Вы используете 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 }) });
1 голос
/ 03 апреля 2014

попробуйте добавить .html_safe к вашей строке в представлении.

<%= "$(document).ready ( function() { $.jGrowl(\"#{p.message.html_safe}\", { sticky: true }) });" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...