Как извлечь поля перечисления Rails и получить массив целых чисел?

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я использую Rails 5.2.

Я хочу извлечь поле перечисления и получить массив целых чисел.

 class Foo < ApplicationRecord
    enum bar: { val1: 1, val2: 2 }
end

Foo.pluck(:bar) #=> ['val1', 'val2']
Foo.pluck('foos.bar') #=> ['val1', 'val2']
Foo.pluck(:bar_before_type_cast) #=> DB error!
  

Я могу написать это как Foo.pluck(:bar).map {|bar| Foo.bars[bar]} , но я хочу написать это короче.

Как этого добиться?

Ответ №1:

Вы можете использовать псевдоним:

 Foo.pluck('bar AS f')
  

Он вернет массив целых чисел.

Это работает на основе следующего из документов:

Pluck возвращает массив значений атрибутов, приведенных к типу, чтобы соответствовать извлеченным именам столбцов, если они могут быть выведены.

Поскольку возвращаемое вами значение является чем-то, что невозможно вывести, вместо этого возвращается его «значение базы данных».