2010-10-27 99 views
16

在我的控制器中,我正在构建书籍的json对象。我想要显示truncate(book.content, 250)Rails 3 - 在控制器中截断?

这在轨道控制器中不起作用。鉴于这是一个JSON渲染,我不使用视图。那么如何截断?我不希望我的JSON对象变得很大:)!

谢谢。

+0

非常混乱。我想用文本字段构建一个JSON对象,但只显示250个字符...所以我需要截断。但Rails不会让你在视图或模型中截断,所以我在哪里构建JSON对象? – TheExit 2010-10-27 06:36:42

回答

35

您可以使用许多方法来完成此操作。最有说服力的是将适当的帮手包含在控制器中。在这一点,将是:

class BooksController < ApplicationController 
    include ActionView::Helpers::TextHelper 
    ... 
end 

另外,您还可以创建一个局部产生你所需要的代码,通过适当的代码示例_truncate.html.erb:

<%= truncate (@book, :length => 250) %> 

然后呈现在你的看法:

result = render_to_string :partial => 'truncate' 

希望这会有所帮助。

+0

谢谢,我正在做truncate(@book,200),那是错误的...当我使用:长度它的工作?奇怪..你不需要在视图中的长度.. – TheExit 2010-10-27 15:33:04

+1

truncate(@book,200)语法已被弃用一段时间了,正确的方式来使用截断是将选项哈希传递给对象后。我不确定,为什么不推荐使用的方法在视图中而不是在控制器中工作,但您应该坚持使用新的语法。 :-) – mdrozdziel 2010-10-27 20:26:51

26

您可以直接调用truncate rails字符串方法。

http://apidock.com/rails/String/truncate

"Once upon a time in a world far far away".truncate(27) 

@book.content.truncate(250) 

不是100%肯定,如果你要包括

include ActionView::Helpers::TextHelper 
+2

对我来说这是一个更好的答案 – FireDragon 2014-01-16 21:07:32

+0

这是一个更好的答案,因为你不必包括帮手。它默认为'...',但可以传递省略:'xxx'作为选项。 – hellion 2014-09-15 22:27:33