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