今天我遇到了一个小问题,当时我试图使用sanitize和truncate来相互结合,为我的博客创建一个摘录.每种方法都可以单独使用,但是一起使用它只会截断.我尝试了这两种语法(前者在一篇名为“Six
Ruby on Rails Tips& Tricks”的博文中被推荐):
<%= truncate(sanitize(post.content),length: 580) %> <%= sanitize(truncate(post.content,length: 580,separator: '<p>')) %>
然后我尝试将truncate放在控制器中,并在视图中清理该对象,但仍然没有.
最后我让它像这样工作:
<%= sanitize(post.content.truncate(580,separator: '</p>')) %>
我想知道的是,当我用另一种方法包装方法时,为什么它不起作用?我试过的最后一种方式有什么不同?
TIA
‘bondiBox’
解决方法
Truncate和Sanitize不包含在控制器中,它们分别是ActionView :: Helpers :: TextHelper和ActionView :: Helpers :: SanitizeHelper的一部分.默认情况下,这些模块不包含在控制器中,因此您无法在其中使用它们.
但是,两者都包含在视图(模板)中,因此您可以在其中使用它们.您可以在控制器类中包含上述模块以在那里使用它们,但我不推荐它.
第二个语句起作用的原因是因为Rails从Ruby扩展了一些基础对象,比如带有几个methods的String.所以你实际上在一个字符串的截断版本上调用了sanitize.
两者的结合有点棘手.我无法真正告诉你为什么没有更多信息,sanitize和truncate的模块版本的组合不起作用.你究竟在这里完成了什么(例子?)