Самый простой способ - создать отдельный класс валидатора вместо обычного метода валидации. В действительности валидатор - это просто подкласс ActiveModel::Validator
или ActiveModel::EachValidator
, который реализует #validate
или #validate_each
:
class TitleCaseValidator < ActiveModel::Validator
def validate(record)
unless record.name[0] == record.name[0].upcase
record.errors[:title] << 'must be title cased'
end
end
end
class Album
validates_with TitleCaseValidator
end
class Book
validates_with TitleCaseValidator
end
class TitleCaseValidator < ActiveModel::EachValidator
def validate(record, attribute, value)
unless value[0] == value[0].upcase
record.errors[attribute] << 'must be title cased'
end
end
end
class Album
validates :title, title_case: true
end
class Artist
validates :name, title_case: true
end
См. Выполнение пользовательских проверок .