2013-08-03 53 views
7

今天我遇到了一个小问题,当我试图使用清理和截断相互结合来创建我的博客摘录。每种方法本身都有效,但是它们一起使用只会截断。我想这两个语法(原标题为博客文章“六Ruby on Rails的技巧&技巧”被推荐):截断+在轨中消毒视图

<%= truncate(sanitize(post.content), length: 580) %> 
<%= sanitize(truncate(post.content, length: 580, separator: '<p>')) %> 

然后我试图把控制器截断,和消毒该对象在的观点,但仍然没有。

最后我得到了它这样的工作:

<%= sanitize(post.content.truncate(580, separator: '</p>')) %> 

我想知道的是,为什么当我裹在另一种方法一种方法没有工作?与我最后一次尝试它的方式有什么不同?

TIA 'bondibox'

回答

0

截断和消毒不包括在控制器,它们分别ActionView::Helpers::TextHelperActionView::Helpers::SanitizeHelper一部分。这些模块在控制器中默认不包含,所以您不能在那里使用它。

但是,两者都包含在视图(模板)中,因此您可以在其中使用它们。您可以将上述模块包含在控制器类中以在那里使用它们,但我不会推荐它。

第二条语句工作的原因是因为Rails从Ruby扩展了一些基础对象,如String和几个methods。所以你实际上调用了一个由String方法截断的字符串的截断版本。

两者的结合有点棘手。我无法告诉你为什么sanitizetruncate的模块版本的组合不能没有更多的信息。你究竟在这里完成了什么(例子?)