Rails:从自定义验证器调用标准验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails:从自定义验证器调用标准验证相关的知识,希望对你有一定的参考价值。

有没有办法从自定义验证器中调用标准Rails验证器?

我有OAuth /电子邮件注册/登录的组合,我希望能够在每种身份验证方法上调用某些验证器。例如,如果用户通过电子邮件注册然后调用单个验证器(例如validates_uniqueness_of :email),我希望能够调用validates_with UserValidator

如果没有办法做到这一点,我将使用状态跟踪和一系列:if验证。

答案

我相信没有办法从自定义调用其他验证器,这也可能导致循环依赖,这是危险的。

您必须使用条件验证,但请记住,您可以像这样对它们进行范围化(取自Rails指南)

with_options if: :is_admin? do |admin|
  admin.validates :password, length: { minimum: 10 }
  admin.validates :email, presence: true
end
另一答案

如果你的目标是调用自定义和标准rails验证器的某些组合,你可以使用validates提供的ActiveModel::Validations方法来实现这一点。

例如,您已创建自定义Email Validator

class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    record.errors.add attribute, (options[:message] || "is not an email") unless
      value =~ /A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})z/i
  end
end

而且你想把它包含在你的Person课程中。你可以这样做:

class Person < ApplicationRecord
  attr_accessor :email

  validates :email, presence: true, email: true
end

这将调用您的自定义验证器和PresenceValidator。这里的所有示例都来自文档ActiveModel::Validations::Validates

以上是关于Rails:从自定义验证器调用标准验证的主要内容,如果未能解决你的问题,请参考以下文章

WCF 自定义验证器:如何从自定义验证器初始化“用户”对象

keycloak 从自定义协议映射器抛出身份验证错误

从自定义默认 Spring 验证中删除批量

ruby 我的博客文章“Rails中更好的条件验证”的片段

如何从自定义页面模板调用 WordPress 插件功能?

如何从自定义身份验证提供程序类更改 Json 格式的 BadCredentialsException、UserNameNotFound 异常消息