18

我尝试在我的 rails 应用程序中添加电子邮件验证器。我创建了以下文件/lib/validators/email_validator.rb

class 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

在 application.rb 我添加了这一行:

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

这是我的用户模型:

class User < ActiveRecord::Base
  attr_accessible :email, :password,:name
  validates :email, :presence => true, :uniqueness => true, :email => true  
end

如果我想启动服务器,我得到一个错误:

Unknown validator: 'EmailValidator' (ArgumentError)

有人知道我该如何解决这个问题吗?

4

3 回答 3

12

如果您将自定义验证器放在 app/validators 中,它们将自动加载,而无需更改您的 config/application.rb 文件。

资源:Rails 3 自定义验证器应该存储在哪里?(第二个答案)

于 2013-03-07T22:08:12.687 回答
5

发生此错误,因为 rails 在您的验证文件之前加载模型文件

尝试在模型文件的开头手动要求您的验证文件

require_dependency 'validators/email_validator.rb'
于 2014-06-20T11:03:20.767 回答
-3

尝试修改后的用户模型;

class User < ActiveRecord::Base

  attr_accessible :email, :password,:name

  validates :email, :presence => true, :uniqueness => true

end
于 2014-06-20T10:03:13.807 回答