Ruby on Rails - Rails3 不会在 lib 中加载我的验证器



我把EmailValidator放在lib/validators/email_validator中,但它不起作用(我把root/lib放在load_path)

这是代码..我将类作为父文件夹名称放在模块验证器中

class Validators::EmailValidator < ActiveModel::EachValidator
    def validate_each(object, attribute, value)
        unless value =~ /^([^@s]+)@([a-z0-9]+.)+[a-z]{2,}$/i
            object.errors[attribute] << (options[:message] || "is not formatted properly")
        end
    end
end

我收到错误未知验证器:"电子邮件"

您有两个选择:

  1. 将您的自定义验证器置于 config/initializers 下。
  2. 或者将lib/validators添加到 config/application.rb 中的自动加载路径中。

    config.autoload_paths << "#{config.root}/lib/validators"

就个人而言,我会选择第二种选择,因为lib/validators可以很好地封装。

由于您将自定义验证器放在lib/validatorsValidators::中,因此您还必须使用该命名空间引用它。

validates :email, presence: true, :'validators/email' => true

更新:你需要这个:

module Validators
  class EmailValidator < ActiveModel::EachValidator
    def validate(object, attribute, value)
        unless value =~ /^([^@s]+)@([a-z0-9]+.)+[a-z]{2,}$/i
            object.errors[attribute] << (options[:message] || "is not formatted properly")
        end
    end
  end
end
class YourModel < ActiveRecord::Base
  include Validators
  validates :email, :presence => true, :email => true
end

否则,您需要将验证器类放在 ActiveModel::Validations 命名空间下。 当您为类命名时,如果该命名空间不是它已包含的命名空间,则 ActiveRecord 不会看到它。

相关内容

  • 没有找到相关文章

最新更新