ActiveRecord::Mysql::Enum Coverage Status

This gem is an extension to ActiveRecord which enables native support of enumerations in the database schema using the ENUM type in MySQL. Forked and revitalized from enum_column3 which was itself a fork of a fork of Nick Pohodnya's original gem for Rails 3, enum_column3.

Support

Currently this is tested with ActiveRecord version 5.2, 6.0, 6.1, and 7.0.

Supported adapters:

  • mysql2

Installation

In your Gemfile add the following snippet

gem 'activerecord-mysql-enum', '~> 1.0', require: 'active_record/mysql/enum'

Non-Rails Application

In order to initialize the extension in non-Rails applications, you must add the following line to your application's bootstrapping code after ActiveRecord has been initialized.

ActiveRecord::Mysql::Enum.initialize!

Usage

Schema Definitions

When defining an enum in your schema, 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

Model Validations

You can then automatically validate this column using:

validates_columns :severity, :color

Setting/Getting Values

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.

irb(1)> Enumeration.columns_hash['color'].limit
=> [:red, :blue, :green, :yellow]
irb(2)> @enumeration.column_for_attribute(:color).limit
=> [:red, :blue, :green, :yellow]