ruby-on-rails – 在Rails视图中截断Sanitize

今天我遇到了一个小问题,当时我试图使用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的模块版本的组合不起作用.你究竟在这里完成了什么(例子?)

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...