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