Как получить целочисленное значение из перечисления в 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