2011-01-21 60 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