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

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

enum выглядит так:

  enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 }

Как получить целочисленное значение?

Я пробовал

Model.sale_info.to_i

Но это возвращает только 0.

Ответ 1

Вы можете получить целочисленные значения для перечисления из класса, в котором включено перечисление:

Model.sale_infos # Pluralized version of the enum attribute name

Возвращает хэш как:

{ "plan_1" => 1, "plan_2" => 2 ... }

Затем вы можете использовать значение sale_info из экземпляра класса Model для доступа к целочисленному значению для этого экземпляра:

my_model = Model.find(123)
Model.sale_infos[my_model.sale_info] # Returns the integer value

Ответ 2

Вы можете получить целое число так:

my_model = Model.find(123)
my_model[:sale_info] # Returns the integer value

Обновление для рельсов 5

Для рельсов 5 приведенный выше метод теперь возвращает строковое значение: (

Лучший способ, который я вижу сейчас:

my_model.sale_info_before_type_cast

Ответ Shadwell также продолжает работать на рельсах 5.

Ответ 3

Rails < 5

Другим способом было бы использовать read_attribute():

model = Model.find(123)
model.read_attribute('sale_info')

Rails >= 5

Вы можете использовать read_attribute_before_type_cast

model.read_attribute_before_type_cast(:sale_info)
=> 1

Ответ 4

Мой короткий ответ Model.sale_infos[:plan_2], если вы хотите получить значение plan_2