No release in over a year
Enable enum type for the MySQL Adapter in ActiveRecord
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 5.2, < 7.1
>= 0.4.5, < 0.6
 Project Readme

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]