2013-08-03 52 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的模塊版本的組合不能沒有更多的信息。你究竟在這裏完成了什麼(例子?)