【问题标题】:Rails Active Record equivalent of SQL with conditional expressionsRails Active Record 等效于带有条件表达式的 SQL
【发布时间】:2017-01-25 10:32:42
【问题描述】:

我有以下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>, ......]

非常感谢任何帮助。

【问题讨论】:

  • 不工作,错误,不是想要的输出?
  • @Iceman 不是所需的输出,它仍然返回 1,2....
  • 这是意料之中的,您正在从数据库中选择列 a,但 case...when 在不同的列中返回结果。

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


【解决方案1】:

在 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多