我有一个模型,在这个模型中,我必须使用Validator验证特定的属性。由于这种验证既复杂又漫长,我想指定不同的验证器在哪个属性中工作。
伪代码:使用:NameValidator验证:name验证:年龄,使用:AgeValidator
我怎样才能做到这一点?
感谢
您可以定义每个属性的自定义验证类,如下所示:
class Person < ApplicationRecord
validates :email, presence: true, email: true
end
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})z/i
record.errors.add attribute, (options[:message] || "is not an email")
end
end
end
您可以使用自定义验证器(https://guides.rubyonrails.org/active_record_validations.html#performing-自定义验证(或使用validate
方法:
class Model < ActiveRecord
validate :hard_validator_for_name
private
def hard_validator_for_name
if self.name != 'VALID NAME'
errors.add(:name, "name not valid")
end
end
end