Don’t like storing enums as integers in your database? Introducing...
String enums for Rails!! 🎉
- scopes
- validations
- accessor methods
- update methods
Add this line to your application’s Gemfile:
gem "str_enum"
Add a string column to your model.
add_column :users, :status, :string
And use:
class User < ActiveRecord::Base
str_enum :status, [:active, :archived]
end
The first value will be the initial value. This gives you:
User.active
User.archived
And negative scopes
User.not_active
User.not_archived
user = User.new(status: "unknown")
user.valid? # false
user.active?
user.archived?
user.active!
user.archived!
<%= f.select :status, User.statuses.map { |s| [s.titleize, s] } %>
Choose which features you want with (default values shown):
class User < ActiveRecord::Base
str_enum :status, [:active, :archived],
accessor_methods: true,
allow_nil: false,
default: true,
prefix: false,
scopes: true,
suffix: false,
update_methods: true,
validate: true
end
Prevent method name collisions with the prefix
and suffix
options.
class User < ActiveRecord::Base
str_enum :address_status, [:active, :archived], suffix: :address
end
# scopes
User.active_address
User.archived_address
# accessor methods
user.active_address?
user.archived_address?
# update methods
user.active_address!
user.archived_address!
View the changelog
Everyone is encouraged to help improve this project. Here are a few ways you can help:
- Report bugs
- Fix bugs and submit pull requests
- Write, clarify, or fix documentation
- Suggest or add new features
To get started with development and testing:
git clone https://github.com/ankane/str_enum.git
cd str_enum
bundle install
bundle exec rake test