How get integer value from a enum in Rails?

My short answer is Model.sale_infos[:plan_2] in case if you want to get value of plan_2


You can get the integer values for an enum from the class the enum is on:

Model.sale_infos # Pluralized version of the enum attribute name

That returns a hash like:

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

You can then use the sale_info value from an instance of the Model class to access the integer value for that instance:

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

You can get the integer like so:

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

Update for rails 5

For rails 5 the above method now returns the string value :(

The best method I can see for now is:

my_model.sale_info_before_type_cast

Shadwell's answer also continues to work for rails 5.


Rails < 5

Another way would be to use read_attribute():

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

Rails >= 5

You can use read_attribute_before_type_cast

model.read_attribute_before_type_cast(:sale_info)
=> 1