【问题标题】:Get a dynamic column value in Activerecord Select statement在 Activerecord Select 语句中获取动态列值
【发布时间】:2020-08-18 15:48:27
【问题描述】:

我有一个名为 Product 的模型,我想从 ActiveRecord SELECT 语句中获取 idname 和动态计算的属性值。 Product 模型具有 idnameproduct_type 属性。 目前我正在尝试使用类似 SQL 的方法

Product.select("id, name, CASE WHEN product_type = 'AB' THEN 'xyz1' WHEN product_type = 'BC' THEN 'xyz2' END AS custom_value")

转换为以下原始 SQL

SELECT id, name, 
  CASE 
   WHEN product_type = 'AB' THEN 'xyz1'
   WHEN product_type = 'BC' THEN 'xyz2'
  END AS custom_value
FROM Product

但是这种方法不会返回在运行时计算的列,它只返回Product 记录的idname 列。

【问题讨论】:

  • “product_type”列不可见,但可以使用它。试试Product.select(...)[0].case

标签: postgresql ruby-on-rails-4 activerecord ruby-on-rails-5


【解决方案1】:

“product_type”列未明确包含在返回值中,但可以使用它。如果你执行Product.select(...).first.case,你会看到它对应的值。

如果你想用不同的方式来识别和访问它,你可以使用别名:

Product.select("
  id,
  name,
  CASE
    WHEN product_type = 'AB' THEN 'xyz1'
    WHEN product_type = 'BC' THEN 'xyz2'
  END AS foo
").first.foo
# "xyz1"

【讨论】:

  • 第二种方法对我有用。第一个说产品的未定义方法“案例”。
  • 抱歉,在这种情况下,您使用的是别名,那么它应该是 custom_value
猜你喜欢
  • 1970-01-01
  • 2011-01-23
  • 2017-09-26
  • 2021-01-28
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多