2017-01-25 30 views
2

我有以下SQLRails的活動記錄相當於與條件表達式

SELECT a, 
     CASE WHEN a=1 THEN 'one' 
      WHEN a=2 THEN 'two' 
      ELSE 'other' 
     END 
    FROM test; 

隨着活動記錄我試圖建立查詢像

@tests = Test.find_by_sql(
      "SELECT a, 
       CASE WHEN a=1 THEN 'one' 
        WHEN a=2 THEN 'two' 
        ELSE 'other' 
       END 
      FROM test") 

但不返回結果集所需!

[#<Test a: 1>, #<Test a: 2>, #<Test a: 3>, ......]

任何幫助非常讚賞。

+0

不工作在什麼方式,錯誤,而不是所需的輸出? – Iceman

+0

@Iceman不是所需的輸出,它仍然返回1,2 .... –

+0

這是可以預料的,你從數據庫中選擇列'a',但'case ... when'返回結果在不同的列中。 – Iceman

回答

2

在AR中沒有這樣做的直接方式,所以你必須寫在case..when部分,但至少這更接近Rails的方式。

tests = Test.all.select(%(
    a, 
    (CASE WHEN a=1 THEN 'one' 
       WHEN a=2 THEN 'two' 
       ELSE 'other' END) as a_text 
)) 

tests.first.a_text #= 'one' or 'two' 
+1

謝謝,像一個魅力工作。 –