Мне нужно применить проверку к модели, чтобы 2 целочисленных значения в записи, минимальное и максимальное, образовали включающий диапазон (например, 2 и 3 в порядке, а 4 и 1 - нет).Из того, что я понимаю, так как мне нужно проверить 2 значения друг против друга в одной и той же записи, я должен использовать ActiveModel :: Validator (а не ActiveModel :: EachValidator).Итак, я пробую следующее:
Модель (app / models / position.rb):
class Position < ActiveRecord::Base
validates_with InclusiveRangeValidator
end
Validator (app / lib / validators / inclusive_range_validator.rb):
class InclusiveRangeValidator < ActiveModel::Validator
def validate(record)
record.errors[:base] << "#{record.minimum} and #{record.maximum} do not form a valid inclusive range." unless record.minimum < record.maximum
end
end
Я читал, что Rails 3.0.5 больше не загружает каталог lib автоматически, поэтому я добавил эту строку в config / application.rb:
config.autoload_path += %W({config.root}/lib)
И затем я сбросил настройкисервер rails, так что он примет изменения в config / application.rb.Я запускаю свои модульные тесты, которые пытаются проверить модель, чтобы доказать, что эта валидация работает.Я получаю эту ошибку:
uninitialized constant: Position::InclusiveRangeValidator (NameError)
Я думаю, что происходит то, что Rails не распознает / не находит мой пользовательский класс валидатора, и поэтому он предполагает, что InclusiveRangeValidator является константой в классе, на который он ссылается. Но,Я думал, что изменение, внесенное в config / application.rb, поместит мой валидатор в путь загрузки, чтобы он был доступен.
Я просмотрел другие посты в StackOverflow и не нашелрешение, и я прочитал документы API на валидаторы, но безрезультатно.Я должен делать что-то простое и глупое, но я не понимаю, в чем проблема.Любая помощь?
EDIT : После дополнительных поисков я обнаружил, что мне вообще не нужен специальный валидатор, поскольку я могу достичь той же цели с помощью этого:
validates :minimum, :numericality => {:greater_than_or_equal_to => 0 }
validates :maximum, :numericality => {:greater_than => :minimum }
Однако остается вопрос, почему Rails не может найти пользовательский класс проверки.