2011-01-21 64 views
4

MyModel.select('a, b, c').all的Rails 3:包括在查询

这将返回从数据库下列SQL函数:

+---+---+---+ 
| a | b | c | 
+---+---+---+ 
| 1 | 2 | 3 | 
| 4 | 5 | 6 | 
| 7 | 8 | 9 | 
+---+---+---+ 

问题:如何将包括一个SQL函数的结果第四列?

+---+---+---+---------------------+ 
| a | b | c | MYFUNCTION(a, b, c) | 
+---+---+---+---------------------+ 
| 1 | 2 | 3 | 123     | 
| 4 | 5 | 6 | 456     | 
| 7 | 8 | 9 | 789     | 
+---+---+---+---------------------+ 

下不工作:

MyModel.select('a, b, c, MYFUNCTION(a, b, c)').all

虽然,如果我用AS给列一个有效的模型属性的名称,它的工作原理:

MyModel.select('a, b, MYFUNCTION(a, b, b) AS c').all

+---+---+-----+ 
| a | b | c | 
+---+---+-----+ 
| 1 | 2 | 122 | 
| 4 | 5 | 455 | 
| 7 | 8 | 788 | 
+---+---+-----+ 

我宁愿在模型的上下文中解决这个问题,而不是恢复原始SQL,因为我还需要使用范围。

任何建议非常感谢。

回答

2

您可以将任意名称赋予AS列,而不是提供现有属性。

irb(main):009:0> u = User.select('id, id+1 as blah').first 
=> #<User id: 1> 
irb(main):010:0> u.id 
=> 1 
irb(main):011:0> u.blah 
=> 2 
irb(main):012:0> 
+0

太棒了,所以你可以!我很困惑,因为这在返回的模型中不可见(对上面009:0行的响应)。谢谢。 – gjb 2011-01-21 23:29:18