在Rails视图中截断+清理

use*_*201 9 truncate ruby-on-rails sanitize

今天我遇到了一个小问题,当时我试图使用sanitize并截断它们来为我的博客创建一个摘录.每个方法本身都有效,但是一起使用它只会截断.我尝试了这两种语法(前者在一篇名为"Six Ruby on Rails Tips&Tricks"的博文中被推荐):

<%= truncate(sanitize(post.content), length: 580) %>
<%= sanitize(truncate(post.content, length: 580, separator: '<p>')) %>
Run Code Online (Sandbox Code Playgroud)

然后我尝试将truncate放在控制器中,并在视图中清理该对象,但仍然没有.

最后我让它像这样工作:

<%= sanitize(post.content.truncate(580, separator: '</p>')) %>
Run Code Online (Sandbox Code Playgroud)

我想知道的是,当我用另一种方法包装方法时,为什么它不起作用?我尝试过的最后一种方式有什么不同?

TIA'bondibox'

Flo*_*ian 0

Truncate 和 Sanitize 不包含在控制器中,它们分别是ActionView::Helpers::TextHelper和的一部分ActionView::Helpers::SanitizeHelper。这些模块默认不包含在控制器中,因此您不能在其中使用它。

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

第二条语句有效的原因是 Rails 从 Ruby 扩展了一些基础对象,比如String一些方法。因此,您实际上对由 方法截断的字符串的截断版本调用 sanitize String

两者的结合有点棘手。如果没有更多信息,我无法真正告诉您为什么模块版本sanitize和的组合truncate不起作用。您到底想在这里完成什么(示例?)