Rails使用链接截断帮助程序作为省略文本

时间:2011-02-17 17:11:23

标签: ruby-on-rails helper truncate

我有很长的描述,我想截断使用truncate helper。 所以我正在使用:

truncate article.description, :length => 200, :omission => ' ...'

问题是我想使用更多作为可点击链接,所以理论上我可以使用它:

truncate article.description, :length => 200, :omission => "... #{link_to('[more]', articles_path(article)}"

遗漏文本被视为不安全,因此被转义。我试图使它成为html_safe但它没有用,而不是链接[更多]我的浏览器仍然显示该链接的html。

有没有办法强制截断来打印遗漏链接而不是遗漏文本?

7 个答案:

答案 0 :(得分:11)

使用Rails 4,您可以/应该传入一个链接块:

truncate("Once upon a time in a world far far away", 
  length: 10, 
  separator: ' ', 
  omission: '... ') {     
    link_to "Read more", "#" 
}

答案 1 :(得分:10)

我建议您使用辅助方法自行完成此操作,这样您就可以对输出进行更多控制:

def article_description article
  output = h truncate(article.description, length: 200, omission: '...')
  output += link_to('[more]', article_path(article)) if article.description.size > 200
  output.html_safe
end

答案 2 :(得分:7)

肮脏的解决方案......使用“原始”方法来解决它 你必须确保你内容的“健全”。

raw(truncate article.description, :length => 200, :omission => "... #{link_to('[more]', articles_path(article)}")

raw是一个像html_safe一样的助手 再见

编辑:不是被遗漏的遗漏,而是截断方法的结果。

答案 3 :(得分:4)

我遇到了类似的情况,这就行了。尝试(换行符可读性):

(truncate h(article.description), 
                  :length => 200, 
                  :omission => "... #{link_to('[more]',articles_path(article)}")
                  .html_safe

您可以使用h来确保文章描述的完整性,并且由于您将link_to设置为您不知道可能是邪恶的路径,因此您可以将结果字符串标记为html_safe而无需担心。

答案 4 :(得分:2)

TextHelper#truncate有一个block form of truncate,可让您使用未转义的link_to,同时仍然可以转义截断的文字:

truncate("<script>alert('hello world')</script>") { link_to "Read More", "#" }

#=> &lt;script&gt;alert(&#39;hello world&#39;...<a href="#">Read More</a>

答案 5 :(得分:1)

唯一一个对我有用的人:

<%= truncate(@article.content, length: 200, omission: " ... %s") % link_to('read more', article_path(@article)) %>

答案 6 :(得分:1)

我遇到了同样的问题,在我的情况下我只使用了:escape => false。 这很有效:

truncate article.description, :length => 200, :omission => "... #{link_to('[more]', articles_path(article)}", :escape => false

来自文档:

  

结果标记为HTML安全,但默认情况下会被转义,除非:escape为false ....   链接:http://apidock.com/rails/ActionView/Helpers/TextHelper/truncate