在Rails3.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

我怎样才能使验证器方法工作呢?

最佳答案

我只是猜测,但我认为这是一个名称空间/范围问题。rails将“road”常数解释为存在于car(即car::road)范围内。您可能可以通过使用“::road”引用全局命名空间来绕过它

关于ruby-on-rails - 在Rails 3.1中,为什么在调用另一个模型时我的自定义验证器会引发“NameError:未初始化的常量”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7987440/

10-12 13:03