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