Enum Attributes Validation provides validation functionality for enum attributes in models. It validates inclusion for the specified enum keys. If values are nil the record is saved.
Add to Gemfile:
gem 'enum_attributes_validation'
And then execute:
$ bundle
Or install it yourself as:
$ gem install enum_attributes_validation
Use built in method to specify which enum attributes you want to validate.
class Dog < ApplicationRecord
enum gender: { male: 0, female: 1 }
enum hair_color: { brown: 0, black: 1, blonde: 2 }
validate_enum_attributes :gender, :hair_color
end
dog = Dog.new(hair_color: :brown, gender: :female)
dog.save
# => <Dog gender: "female", hair_color: "brown" >
dog = Dog.new
dog.save
# => <Dog gender: nil, hair_color: nil >
dog = Dog.new(hair_color: nil, gender: nil)
dog.save
# => <Dog gender: nil, hair_color: nil >
Or use the singular method.
class Dog < ApplicationRecord
enum gender: { male: 0, female: 1 }
enum hair_color: { brown: 0, black: 1, blonde: 2 }
validate_enum_attribute :gender
end
To show a custom error message:
class Dog < ApplicationRecord
enum gender: { male: 0, female: 1 }
validate_enum_attribute :gender, message: "Some string msg..."
end
To use translations you need to update your locale file as follows
en:
activerecord:
errors:
models:
#your_model_name#:
attributes:
#your_attribute_name#::
invalid_enum: "can't be %{value}. Valid values are: %{valid_values}"
Bug reports and pull requests are welcome on GitHub at https://github.com/CristiRazvi/enum_attributes_validation.
MIT License.