Почему в Rails 3.1 мой пользовательский валидатор вызывает «NameError: uninitialized constant» при вызове другой модели? - PullRequest
2 голосов
/ 03 ноября 2011

В проекте Rails 3.1 у меня есть класс модели с пользовательским валидатором:

class Car < ActiveRecord::Base
  validate :road_must_exist_nearby, :on => :create

  # ...

  def not_a_validator_method
    Road.exists_nearby?
  end

  def road_must_exist_nearby
    if !Road.exists_nearby?
      # ...
    end
  end
end

Когда я пытаюсь сохранить свой экземпляр автомобиля ...

> car = Car.new
> car.save

Я получаю следующую ошибку:

NameError: uninitialized constant Car::Road

Почему вызов Road.exists_nearby? из обычного метода экземпляра работает?:

> car.not_a_validator_method
=> true

И почему вызов его из метода валидатора вызывает ошибку, как если бы Rails полагал, что Road следует вызывать через Car?:

> car.road_must_exist_nearby
NameError: uninitialized constant Car::Road

А как я могу заставить метод валидатора работать?

1 Ответ

3 голосов
/ 03 ноября 2011

Я только догадываюсь, но я бы сказал, что это проблема пространства имен / области видимости. Rails интерпретирует константу «Road» как существующую в области Car (то есть Car :: Road). Вероятно, вы можете обойти это, ссылаясь на глобальное пространство имен, используя: ":: Road"

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