在 Activerecord Select 语句中获取动态列值

Get a dynamic column value in Activerecord Select statement

我有一个名为 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")

转换为以下 Raw SQL

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

但这种方法不会 return 在运行时计算的列,它仅 return 是 Product 记录的 idname 列.

"product_type" 列未明确包含在 return 值中,但可以使用它。如果你执行 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"