Custom Validations in Rails
Validation is one of the core features which rails provides. There are plenty of built in validation helpers there which helps validating our form inputs or user attributes. But in few cases, if these built in validation helper doesn’t serve your purpose, rails provide support for writing your own custom validators as well. There are many ways to write custom validations. Few of them are:
Validate with custom method
class Post < ApplicationRecord
validate :custom_validation
private def custom_validation
if ! (valid...)
self.errors[:base] << "Custom error message"
end
end
end
Validate with ActiveModel validation
class CustomValidator < ActiveModel::Validator
def validate(record)
if ! (record.valid...)
record.errors[:base] << "Custom Error message"
end
end
end
class Post < ApplicationRecord
validates_with CustomValidator
end
Validate with PORO class
class PoroValidator
def initialize(record)
@record = record
end
def call
if ! (@record.valid...)
@record.errors[:base] << "Custom Error Messages"
end
end
end
class Post < ApplicationRecord
validate do |record|
PoroValidator.new(record).()
end
end