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

前端之家收集整理的这篇文章主要介绍了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的模块版本的组合不起作用.你究竟在这里完成了什么(例子?)

猜你在找的Ruby相关文章