Ruby on Rails, кажется, автоматически экранирует HTML, созданный link_to - PullRequest
6 голосов
/ 25 марта 2011

Вот мой код, я пытаюсь отобразить список ссылок на команды bboy в форме предложения с .to_sentence

<span class="affiliation">
    <% if(@bboy.crews.count > 0)%>
    <span><%= if(@bboy.crews.size > 1) then "Crew".pluralize else "Crew" end %>:</span>
    <%= @bboy.crews.collect{|c| link_to c.name, c}.to_sentence %>
    <% else %>  
    <em>Independent</em>
    <% end %>
</span>

Вывод, который я получаю, - это правильные ссылки, но он отображается как:

<a href="/crews/1">Hustle Kidz</a> and <a href="/crews/2">Knuckleheads Cali</a>

вместо:

Hustle Kidz и Knuckleheads Cali

с htmlсбежал, а не нужные ссылки.

Я что-то упустил?Я пробовал CGI.unescapeHTML и несколько других, но заблудился ...

Ответы [ 4 ]

20 голосов
/ 25 марта 2011

Rails 3 теперь автоматически экранирует все, чтобы вывести сырой HTML, используйте это:

<%= some_string.html_safe %>

или это:

<%= raw @some_html_string %>

Благодаря macek дляподсказка.

Для дополнительных деталей: http://markconnell.co.uk/posts/2010/02/rails-3-html-escaping

4 голосов
/ 25 марта 2011

Вы можете (и должны) использовать метод raw

<%= raw @some_html_string %>
2 голосов
/ 25 марта 2011

Я согласен с Kleber S, вы должны переместить это в помощника, потому что это много логики для представления

def crews_description(crews)
  if crews.empty?
    content_tag('em', 'Independent')
  else
    label = "Crew"
    label = label.pluralize if crews.size > 1
    crews_links = crews.map {|crew| link_to(h(crew.name), crew)}.to_sentence
    content_tag('span', label) + crews_links.html_safe
  end
end

и по вашему мнению:

<span class="affiliation">
  <%= crews_description(@bboy.crews)
</span>
0 голосов
/ 25 марта 2011

Я рекомендую переместить этот блок кода в помощник, а затем использовать метод .html_safe для получения ожидаемых результатов.

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