12

今天,当我尝试将 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'

4

4 回答 4

2

这对我有用:

<%=  sanitize(article.description[0..100]) %>

于 2019-03-12T07:37:11.447 回答
0

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

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

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

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

于 2013-08-04T09:21:30.983 回答
0

一个老问题,但在我自己与这个问题作斗争时落到了它上面。问题是它sanitize不会去除所有 HTML 标签,而只会去除一些默认定义的标签,例如script. 因此,您必须指定不允许使用任何标签:

truncate sanitize(post.content, tags: [], attributes: []), length: 580

于 2018-12-28T20:17:56.147 回答
-2

谢谢鲁本,

<%=  sanitize(article.description[0..100]) %>

在 Rails 6 中完美运行。我们的经验是所有其他带有截断的组合都不起作用。

于 2019-11-12T19:42:36.053 回答