sql - Rails Active Record 相当于带有条件表达式的 SQL

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

非常感谢任何帮助。

最佳答案

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

关于sql - Rails Active Record 相当于带有条件表达式的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849242/

相关文章:

ruby-on-rails - 以数组作为属性的 Ruby 模型

ruby-on-rails - 为什么 ActiveRecord#first 调用之间的 sleep 会改变其行为?

ruby-on-rails - belongs_to touch : true not fired on association. 构建和嵌套属性赋值

c# - 运行存储过程时无法解释的超时

mysql - 这个语法有什么问题?

jquery - :remote => true confusion with form_for

ruby-on-rails - 从多个 ActiveRecord 查询创建 Ruby 哈希的有效方法

mysql - 迁移问题 : MS SQL > MySQL: Insert Buffer Memory

如果另一个字段为空,SQL 将使用某个字段

ruby-on-rails - 为 gem Rails 配置全局设置的最佳位置