Получить динамическое значение столбца c в операторе Selectrecord Active. - PullRequest
0 голосов
/ 04 мая 2020

У меня есть модель с именем Product, и я хочу получить 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

, но этот подход не возвращает столбец, вычисленный при во время выполнения возвращает только столбцы id и name для записи Product.

1 Ответ

1 голос
/ 04 мая 2020

Столбец «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"
...