Ruby on Rails似乎是自动转义由link_to创建的html

Chr*_*s M 6 ruby ruby-on-rails ruby-on-rails-3

这是我的代码,我试图用句子形式显示一个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>
Run Code Online (Sandbox Code Playgroud)

我得到的输出是正确的链接,但它显示为:

<a href="/crews/1">Hustle Kidz</a> and <a href="/crews/2">Knuckleheads Cali</a>
Run Code Online (Sandbox Code Playgroud)

而不是:

Hustle KidzKnuckleheads Cali

与html转义,而不是所需的链接.

我错过了什么吗?我尝试过CGI.unescapeHTML和其他一些但是迷路了......

Ale*_*vik 20

Rails 3现在自动转义所有内容,为了输出原始HTML使用:

<%= some_string.html_safe %>
Run Code Online (Sandbox Code Playgroud)

或这个:

<%= raw @some_html_string %>
Run Code Online (Sandbox Code Playgroud)

感谢macek提示.

有关其他详细信息,请访问:http://markconnell.co.uk/posts/2010/02/rails-3-html-escaping


Joh*_*hat 2

我同意 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
Run Code Online (Sandbox Code Playgroud)

在你看来:

<span class="affiliation">
  <%= crews_description(@bboy.crews)
</span>
Run Code Online (Sandbox Code Playgroud)