如何在Rails 4中仅从DB中提取部分文本字段

时间:2013-07-09 00:15:33

标签: ruby-on-rails ruby postgresql ruby-on-rails-4

我有一个Rails 4应用程序,文本字段包含很长的字符串(有时是数千个字符)。我想在索引视图中只拉出前500个字符,以使应用程序更高效。我不知道该怎么做,或者即使这是提高性能的最佳方法。请指教。

3 个答案:

答案 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。