to_sentence и html_safe, вместе? - PullRequest
5 голосов
/ 14 марта 2012

Вот строка, которую я хочу:

<a href="/pugs/1-baxter">Baxter</a> and <a href="/pugs/2-sofia">Sofia</a>

Вот код, который я использую для вывода:

<%= @pugs.collect {|p| link_to(p.name, pug_path(p))}.to_sentence %>

К сожалению, вывод кодируется:

 &lt;a href=&quot;/pugs/1-baxter&quot;&gt;Baxter&lt;/a&gt; and &lt;a href=&quot;/pugs/2-sofia&quot;&gt;Sofia&lt;/a&gt;

Я пытался использовать html_safe и raw, но, похоже, они не оказывают никакого влияния.

Ответы [ 3 ]

4 голосов
/ 28 ноября 2016

Начиная с Rails 5, есть помощник вида to_sentence (отличный от Array#to_sentence), который делает это.

С Документы :

to_sentence (массив, опции = {})
Преобразует массив в разделенное запятыми предложение, где последний элемент соединяется соединительное слово. Это версия ActiveSupport с поддержкой html_safe. Массив # to_sentence.

Используйте это как: <% to_sentence(@pugs.collect {|p| link_to(p.name, pug_path(p))}) %>

2 голосов
/ 14 марта 2012
<%= @pugs.collect {|p| link_to(p.name, pug_path(p))}.to_sentence.html_safe %>
1 голос
/ 14 марта 2012

Вы можете обернуть его в промежуток и использовать помощника:

  def content_link_to(name,path=nil,options=nil)
    content_tag :span do
      link_to name, path, options
    end
  end

И использовать его следующим образом:

<%= @pugs.collect {|p| content_link_to(p.name, pug_path(p))}.to_sentence %>
...