1

我有一个 Rails 4 应用程序,其文本字段包含很长的字符串(有时是 10 到数千个字符)。我想只提取索引视图中的前 500 个字符,以提高应用程序的性能。我不确定如何做到这一点,或者即使这是提高性能的最佳方法。请指教。

4

3 回答 3

3

许多 SQL 语言都支持 LEFT 函数,这是一个返回字符串前 n 个字符的标量值。

例如,在 SQLServer 中,您可以使用

SELECT LEFT(text, 500) 

如果数据类型不是 text 或 ntext (两者都已弃用),则此方法有效。

如果您在 Rails 中使用模型,那么您可以使用

MyModel.select("LEFT(COLUMN, 500)")

如果你的 SQL 支持这种类型的函数。确保将它与您的其他值组合到一个 SQL 查询中。

于 2013-07-09T00:18:51.800 回答
3

对于遇到此问题的其他任何人,Jim Pedid 的答案的语法实际上是:

MyModel.select("LEFT(COLUMN, 500) as COLUMN")

原因是左函数返回一个名为“LEFT”而不是“COLUMN”的列,除非您的模型包含一个名为“LEFT”的相同类型的属性,否则rails 将不知道如何处理它。再次将列重命名为“COLUMN”可确保 Rails 允许您访问它。希望这可以避免一些不必要的调试。

我的应用程序中的其他实时(工作)示例:

Post.select("id, title, left(body, 100) as body")

(我会将此作为对 Jim Pedid 答案的评论发布,但还没有足够的声誉。)

于 2014-01-14T18:42:54.303 回答
2

您可以尝试仅从 rails 和通过网络发送的数据开始,即

用于[0..100]获取子字符串,然后这就是作为 html 发送的所有内容,例如

irb(main):006:0> Group.first.group_description[0..100]
  Group Load (0.6ms)  SELECT `groups`.* FROM `groups` ORDER BY group_name LIMIT 1
=> "Charting Tools, Gems and Plugins"

这使您可以在破解 sql 之前先尝试一下,看看是否足够。

于 2013-07-09T00:47:59.497 回答