【问题标题】:Rails 3 - Truncate in a Controller?Rails 3 - 在控制器中截断?
【发布时间】:2011-05-01 03:11:13
【问题描述】:

在我的控制器中,我正在为书籍构建一个 json 对象。我要显示truncate(book.content, 250)

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

谢谢。

【问题讨论】:

  • 非常混乱。我想用文本字段构建一个 JSON 对象,但只显示 250 个字符......所以我需要截断。但是 Rails 不允许你在 View 或 Model 中截断,那么我在哪里构建 JSON 对象呢?

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

您可以使用多种方法来完成此操作。最方便的方法是在控制器中包含适当的助手。在这将是:

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

或者,您也可以创建一个生成您需要的代码的部分,例如带有正确代码的 _truncate.html.erb:

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

然后在你的视图中渲染它:

result = render_to_string :partial => 'truncate'

希望这会有所帮助。

【讨论】:

  • 谢谢,我在做 truncate(@book, 200) 并且出错了...当我使用 :length 时它工作了吗?奇怪..你不需要视图的长度..
  • truncate(@book, 200) 语法已被弃用一段时间,使用 truncate 的正确方法是在对象之后传递选项哈希。我不确定,为什么不推荐使用的方法在视图中而不是在控制器中起作用,但您应该坚持使用新语法。 :-)
【解决方案2】:

你可以直接调用 truncate rails string 方法。

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

【讨论】:

  • 对我来说这是一个更好的答案
  • 这是一个更好的答案,因为您不必包含帮助程序。它默认为'...',但可以传递省略:'xxx'作为选项。
猜你喜欢
  • 2012-10-21
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多