在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/