Enum For What!
This gem is an extension to ActiveRecord which enables native support of enumerations in the database schema using the ENUM type in MySQL.
Originally forked from eletronick/enum_column with several enhancements written and curated from the unenumerable forks of this gem (see what I did there?) with love by Sport Ngin - including support from Rails 3.2 up to 4.2.
Supported adapters:
- mysql
- mysql2
- jdbcmysql (by Nilesh Trivedi)
Installation
In your Gemfile:
gem 'enum_for_what'
Usage
In your schema(s), specify the constraint as a limit:
create_table :enumerations, :force => true do |t|
t.column :severity, :enum, :limit => [:low, :medium, :high, :critical], :default => :medium
t.column :color, :enum, :limit => [:red, :blue, :green, :yellow]
end
In the model, you can then automatically validate this column using:
validates_columns :severity, :color
The rest will be handled for you. All enumerated values will be given as symbols.
@e = Enumeration.new
@e.severity = :medium
You can always use the column reflection to get the list of possible values from the database column.
Enumeration.columns_hash['color'].limit
# or
@enumeration.column_for_attribute(:color).limit
# Will yield => [:red, :blue, :green, :yellow]
If you assign a string to the column, it will be converted to a symbol if it's valid and nil
otherwise,
so if this is the only way you populate color, validates_presence_of
may be the only validation you need.
Enumeration.new(:color => "red") (color will be :red)
Enumeration.new(:color => "infrared") (color will be nil)
In views, you can use the enum_select helper to generate input for enumerated attributes:
<%= enum_select(@enumeration, 'severity')%>
# or
<%= form_for @enumeration do |f| %>
<%= f.label :severity %>
<%= f.enum_select :severity %>
<% end %>
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request