Reputation: 1604
I have a model named Product and I want to get the id
, name
and a dynamically calculated attribute value from ActiveRecord SELECT
statement. Product
model has id
, name
, product_type
attributes.
Currently what I am trying is using an SQL like approach
Product.select("id, name, CASE WHEN product_type = 'AB' THEN 'xyz1' WHEN product_type = 'BC' THEN 'xyz2' END AS custom_value")
Which translates to the following Raw SQL
SELECT id, name,
CASE
WHEN product_type = 'AB' THEN 'xyz1'
WHEN product_type = 'BC' THEN 'xyz2'
END AS custom_value
FROM Product
but this approach does not return the column computed at runtime, it only returns the id
and name
columns for the Product
record.
Upvotes: 2
Views: 807
Reputation: 33471
The "product_type" column isn't explicitly in the return value, but it´s there available for using it. If you execute Product.select(...).first.case
you'll see its corresponding value.
If you want a different way to identify and access to it, you can use an alias:
Product.select("
id,
name,
CASE
WHEN product_type = 'AB' THEN 'xyz1'
WHEN product_type = 'BC' THEN 'xyz2'
END AS foo
").first.foo
# "xyz1"
Upvotes: 2