我有很长的描述,我想截断使用truncate helper。 所以我正在使用:
truncate article.description, :length => 200, :omission => ' ...'
问题是我想使用更多作为可点击链接,所以理论上我可以使用它:
truncate article.description, :length => 200, :omission => "... #{link_to('[more]', articles_path(article)}"
遗漏文本被视为不安全,因此被转义。我试图使它成为html_safe但它没有用,而不是链接[更多]我的浏览器仍然显示该链接的html。
有没有办法强制截断来打印遗漏链接而不是遗漏文本?
答案 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", "#" }
#=> <script>alert('hello world'...<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