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

问题描述 投票:0回答:1

我有一个名为 "产品 "的模型,我想获得 "产品"。id, name 和ActiveRecord的动态计算属性值。SELECT 声明。Product 模型有 id, name, product_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

但这种方法并不返回在运行时计算出的列,它只返回在运行时计算出的 idname 栏目,用于 Product 记录。

postgresql ruby-on-rails-4 activerecord ruby-on-rails-5
1个回答
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"
© www.soinside.com 2019 - 2024. All rights reserved.