Rails用链接截断帮助器作为省略文本

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

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

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

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

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

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

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

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

我建议你自己在一个辅助方法中做这个,这样你就可以对输出有更多的控制:

 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 

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

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

raw是一个像html_safe一样的帮手。
再见

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

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

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

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

TextHelper#truncate具有TextHelper#truncate的块forms ,允许您使用未转义的link_to ,同时仍然可以转义截断的文本:

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

唯一一个适合我的人:

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

我有同样的问题,在我刚刚使用的情况下: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