Rails 3 Custom Validator Проблема - PullRequest
       7

Rails 3 Custom Validator Проблема

0 голосов
/ 08 апреля 2011

Мне нужно применить проверку к модели, чтобы 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 не может найти пользовательский класс проверки.

1 Ответ

2 голосов
/ 09 апреля 2011

Однажды я изменил строку в application.rb на:

config.autoload_paths += %W[#{config.root}/lib/validators/]

Rails смог найти правильный путь для загрузки моего пользовательского валидатора.Я допустил ошибку, предполагая, что Rails будет автоматически возвращать структуру каталогов, очевидно, это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...