Rails Active Record与条件表达式等效的SQL

时间:2017-01-25 10:32:43

标签: sql ruby-on-rails rails-activerecord

我有以下SQL

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>, ......]

任何帮助都非常感激。

1 个答案:

答案 0 :(得分: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'