Проблемы с экранированным html в файле .js.erb

#jquery #html #ruby-on-rails-3

#jquery #HTML #ruby-on-rails-3

Вопрос:

У меня есть файл .js.erb, в котором есть следующая строка

$(«#<%= «пользователь#{current_user.id }_следующий»%>»).html(«<%= escape_javascript(link_to(pluralize(@count,’tag’), user_tags_path(current_user))) %>»)

Он отображает

 <a href=/users/1/tags>1 taga>
  

Вместо

1 тег

Раньше это работало, когда я запускал rails 3.0.4, но теперь, когда я запускаю rails 3.0.8, этого не происходит. Я обнаружил, что мне нужно добавить .html_safe в другие места, которые я использовал auto_link , иначе я столкнусь с той же проблемой.

Как мне сделать так, чтобы он не экранировал этот html?

Ответ №1:

Мне никогда не нравилось интерполировать ваш JS с ruby подобным образом. Это всегда приводит к трудной для понимания волосатости.

Вместо этого сбросьте свои данные в JS самостоятельно как JSON, а затем просто используйте данные как собственный javascript.

 var user = <%= {
  :id => current_user.id,
  :path => user_tags_path(current_user),
  :link_text => pluralize(@count,'tag'),
}.to_json %>;

var link = $('<a>').attr('href', user.path).text(user.link_text);
$('#user'   user.id   '_following').html(link);
  

Что, на мой взгляд, гораздо более понятно и полностью устраняет любые проблемы с HTML, поскольку HTML вообще отсутствует в вашем выражении ruby.