ruby-on-rails rails -为模型中的每个属性添加自定义验证器

qvk1mo1f  于 2023-03-24  发布在  Ruby
关注(0)|答案(2)|浏览(146)

我有一个模型,在这个模型中,我必须用一个Validator来验证特定的属性。因为这个验证是复杂而漫长的,我想指定我希望不同的Validator在哪个属性中工作。
伪代码:验证:name,使用:NameValidator验证:age,使用:年龄验证器
我怎样才能做到这一点?
谢谢

3okqufwl

3okqufwl1#

您可以像这样定义每个属性的自定义验证类:

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
pu3pd22g

pu3pd22g2#

您可以使用自定义验证器(https://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations)或使用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

相关问题