Provides ActiveRecord (and thus Rails) support for the nonstandard ENUM
and SET
data types.
It sucks to have ActiveRecord not understand your ENUM
columns and constantly write the wrong thing to your schema.rb
.
It also sucks to work with a database that uses ENUM
in production when you'd prefer sqlite in development.
Wait no longer...
create_table :balloons, :force => true do |t|
t.enum "color", :limit => ['red', 'gold'], :default => 'gold', :null => false
# or...
t.column "size", :enum, :limit => ['small', 'medium', 'large']
end
Your schema<->db coupling will work again, and it will fall back to a VARCHAR
column on any adapters that don't support ENUM
.
gem 'native_enum'
Make sure to put this line after the line for your database adapter gem, like so:
gem 'mysql2', '~> 0.3.20'
gem 'native_enum'
That's it!
It currently works with:
- ActiveRecord 4.0, 4.1, 4.2, 5.0, and 5.1.
- The
mysql2
andsqlite
adapters. - Ruby 2.0 and above.
If you'd like to support other adapters, pull requests are welcome!
This gem provides compatibility for native ENUM
types in the DB.
ActiveRecord::Enum is actually a layer that takes an integer column in the DB and presents it as an enum type.
These are fundamentally different approaches, with different motivations, costs and benefits.
Following ActiveRecord's lead, this plugin doesn't do any validation work itself.
For ENUM columns, you may be satisfied with something simple:
validates_inclusion_of :attr, :in => [ :possible, :values ]
Or if you prefer more bells and whistles, try brainspec/enumerize.
For SET columns, you may be interested in iangreenleaf/active_set.
This isn't a plugin everyone should use. There are a number of plugins to simulate enum behavior backed by standard data types. Personally, I like nofxx/symbolize.
However, sometimes we can't or won't avoid working with these data types. When that happens, I got you covered.
Pull requests welcome! Join this lovely bunch of people.
To run the tests for all adapters and all versions of ActiveRecord:
appraisal rake spec:all
To run the tests for a specific adapter:
DB=mysql rake spec
To run the tests for a specific version of ActiveRecord:
appraisal activerecord-5.2 rake spec:all