如何在 rails 中使用 ActiveModel::EachValidator 5
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
这将适用于 rails 3.
一个简单的基础 class 可以与 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 的 class 都必须实现一个名为 validate 的方法,该方法接受记录。
要导致验证错误,您必须直接从验证程序消息中添加到记录的错误中。
更多详情请查看here。
如果您只寻找电子邮件验证,那么您可以试试这个。
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
class 放在 models/concerns
目录中。然后在您的模型中,您可以使用下面的示例验证电子邮件属性。
class User < ApplicationRecord
validates :email, presence: true, email: true
end
Rails 会在遇到 email: true
时在范围内寻找 EmailValidator
class 然后使用 validate_each
方法验证属性。
如何使用 ActiveModel::EachValidator
验证特定属性。
我写了下面的代码片段。此验证不会调用保存或验证对象。
class EmailValidator < ActiveModel::EachValidator
def validate_each(record,attribute,value)
# Logic to check email is valid or not
end
end
这将适用于 rails 3.
一个简单的基础 class 可以与 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 的 class 都必须实现一个名为 validate 的方法,该方法接受记录。
要导致验证错误,您必须直接从验证程序消息中添加到记录的错误中。
更多详情请查看here。
如果您只寻找电子邮件验证,那么您可以试试这个。
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
class 放在 models/concerns
目录中。然后在您的模型中,您可以使用下面的示例验证电子邮件属性。
class User < ApplicationRecord
validates :email, presence: true, email: true
end
Rails 会在遇到 email: true
时在范围内寻找 EmailValidator
class 然后使用 validate_each
方法验证属性。