繁体   English   中英

如何在Rails 5中使用ActiveModel :: EachValidator

[英]How to use ActiveModel::EachValidator in rails 5

如何使用ActiveModel::EachValidator验证特定属性。 我已经编写了以下代码段。 此验证不会调用保存或验证对象。

class EmailValidator < ActiveModel::EachValidator
    def validate_each(record,attribute,value)
       # Logic to check email is valid or not
    end
end

这将适用于滑轨3。

可与ActiveModel :: Validations :: ClassMethods#validates_with一起使用的简单基类

class User
  include ActiveModel::Validations
  validates_with EmailValidator
end

class EmailValidator < ActiveModel::Validator
  def validate(record)
     # Logic to check email is valid or not
     record.errors.add :email, "This is some complex validation"
  end
end

从ActiveModel :: Validator继承的任何类都必须实现一个称为validate的方法,该方法接受一条记录。

要导致验证错误,必须直接从验证者消息中添加到记录的错误中。

欲了解更多详情,请点击这里

如果您只寻找电子邮件验证,则可以尝试此操作。

class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attr_name, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
      record.errors.add(attr_name, :email, options.merge(:value => value))
    end
  end
end

您可以将您的EmailValidator类放在models/concerns目录中。 然后,在模型内部,您可以使用以下示例验证email属性。

 class User < ApplicationRecord
   validates :email, presence: true, email: true
 end

当Rails遇到email: true时,它将在范围内寻找EmailValidatoremail: true然后使用validate_each方法验证属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM