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
Я получаю ошибку Неизвестный валидатор: 'email'
Ответы
Ответ 1
У вас есть два варианта:
Лично я бы пошел со вторым вариантом, так как lib/validators
делает для хорошей инкапсуляции.
Ответ 2
Поскольку вы помещаете свой собственный валидатор в Validators::
в lib/validators
, вам также нужно ссылаться на это пространство имен.
validates :email, presence: true, :'validators/email' => true
Ответ 3
UPDATE: вам нужно следующее:
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 не увидит его, если это пространство имен не является пространством имен, которое оно уже включило.