Rails 3 - raw / html_safe не работает в некоторых случаях? - PullRequest
2 голосов
/ 29 октября 2011

У меня проблемы с выводом, который не кодируется, хотя я использую raw или html_safe.

Этот записывает &nbsp на моей последней странице HTLM.

def build_tag_cloud(tag_cloud, style_list)
    tag_cloud.sort!{ |x,y| x.permalink <=> y.permalink }
    max, min = 0, 0
    tag_cloud.each do |tag|
        max = tag.followers.to_i if tag.followers.to_i > max
        min = tag.followers.to_i if tag.followers.to_i < min
    end

    divisor = ((max - min) / style_list.size) + 1

    html = ""
    tag_cloud.each do |tag|
        name = raw(tag.name.gsub('&','&amp;').gsub(' ','&nbsp;'))
        link = raw(link_to "#{name}", {:controller => "/shows", :action => "show", :permalink => tag.permalink}, :class => "#{style_list[(tag.followers.to_i - min) / divisor]}")
        html += raw("<li>#{link}</li> ")
    end
    return raw(html.to_s)
end

Что разрешено использовать raw и html_safe? И как исправить мой пример выше?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Из какого класса этот код?Метод raw объявлен на помощнике, поэтому его можно использовать только на контроллерах и представлениях.

Источник: raw против html_safe против h to unescape html

Кроме того, если этот метод не находится на странице просмотра (что было бы плохой реализацией MVC Rails), вы не можете использовать функцию link_to.Этот помощник доступен только для просмотров.Кроме того, вам не нужно повторно вызывать raw в этой функции.Я думаю, что вы могли бы просто сделать это:

def build_tag_cloud(tag_cloud, style_list)
  ...
  html = ""
  tag_cloud.each do |tag|
    name = tag.name.gsub('&','&amp;').gsub(' ','&nbsp;')
    html += "<a href='#{shows_show_path(tag.permalink)}' class='#{style_list[(tag.followers.to_i - min) / divisor]}'>#{name}</a>"
  end
  html.html_safe
end
1 голос
/ 11 ноября 2011

Методы raw и html_safe, в частности, сообщают rails , что не следует экранировать ваш вывод (raw предпочтителен и исключает явное to_s).

сырой Ссылка html_safe Reference

Я подозреваю, что причина, по которой вы используете raw, связана с тегами li.Я бы порекомендовал использовать помощник по тегам контента.Тогда вам вообще не нужно возиться с кодировкой.Вам может потребоваться поместить метод link_to непосредственно в content_for: li, чтобы ссылка работала правильно (я бы попробовал без первого).

content_tag Reference

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...