我将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
我收到错误未知验证器:'email'
答案 0 :(得分:14)
您有两种选择:
config/initializers
。或者将lib/validators
添加到config/application.rb
中的自动加载路径。
config.autoload_paths << "#{config.root}/lib/validators"
我个人会选择第二个选项,因为lib/validators
可以很好地封装。
答案 1 :(得分:10)
由于您将自定义验证程序放在Validators::
的{{1}}中,因此您必须使用该命名空间引用它。
lib/validators
答案 2 :(得分:4)
更新:你需要这个:
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不会看到它,如果该命名空间不是它已经包含的命名空间。