在 Activerecord Select 语句中获取动态列值
Get a dynamic column value in Activerecord Select statement
我有一个名为 Product 的模型,我想从 ActiveRecord SELECT
语句中获取 id
、name
和一个动态计算的属性值。 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
但这种方法不会 return 在运行时计算的列,它仅 return 是 Product
记录的 id
和 name
列.
"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"
我有一个名为 Product 的模型,我想从 ActiveRecord SELECT
语句中获取 id
、name
和一个动态计算的属性值。 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
但这种方法不会 return 在运行时计算的列,它仅 return 是 Product
记录的 id
和 name
列.
"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"