2011-01-21 14 views
4

MyModel.select('a, b, c').allのRails 3:SQL関数を含むクエリ

これでは、データベースから次の値を返します。

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

は質問:どのように私は、SQL関数の結果と4番目の列が含まれるのでしょうか?

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

すなわち、以下は動作しませんでした:

:私は、列に有効なモデルの属性の名前を与えること ASを使用する場合、それは動作しますが、ものの

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

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

関連する問題