to_sentence和html_safe,在一起?

时间:2012-03-14 05:06:20

标签: ruby-on-rails ruby-on-rails-3 sanitization

这是我想要的字符串:

<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_saferaw,但它们似乎没有任何影响。

3 个答案:

答案 0 :(得分:4)

从Rails 5开始,有to_sentence视图帮助程序(与Array#to_sentence不同)执行此操作。

来自the docs

  

to_sentence (array,options = {})
  将数组转换为逗号分隔的句子,其中最后一个元素由   连接器字。这是ActiveSupport的html_safe感知版本   阵列#to_sentence。

使用它:<% to_sentence(@pugs.collect {|p| link_to(p.name, pug_path(p))}) %>

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可以将其包装在一个范围内并使用帮助器:

  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 %>