我有一个Rails 4应用程序,文本字段包含很长的字符串(有时是数千个字符)。我想在索引视图中只拉出前500个字符,以使应用程序更高效。我不知道该怎么做,或者即使这是提高性能的最佳方法。请指教。
答案 0 :(得分:3)
许多SQL语言都支持LEFT函数,这是一个返回字符串前n个字符的标量值。
例如,在SQLServer中,您可以使用
SELECT LEFT(text, 500)
如果数据类型不是text或ntext(两者都不推荐使用),则可以正常工作。
如果您在Rails中使用模型,则可以使用
MyModel.select("LEFT(COLUMN, 500)")
如果您的SQL支持这种类型的功能。确保将此值与其他值组合成一个SQL查询。
答案 1 :(得分:3)
对于其他遇到这种情况的人来说,Jim Pedid的答案的语法实际上是:
MyModel.select("LEFT(COLUMN, 500) as COLUMN")
原因是left函数返回一个名为“LEFT”而不是“COLUMN”的列,除非你的模型包含一个名为“LEFT”的相同类型的属性,否则rails将不知道如何处理它。再次将列重命名为“COLUMN”可确保使用rails来访问它。希望这会让某些人不必要的调试。
我的应用中的传统实时(工作)示例:
Post.select("id, title, left(body, 100) as body")
(我会将此作为对Jim Pedid的回答发表评论,但尚未有足够的声誉。)
答案 2 :(得分: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。