我为嵌套资源的网址
做了一个帮手# app/urls/url.rb
module Url; end
然后
# app/urls/base.rb
module Url
class Base
# common code
end
end
当我尝试从Url::Base
继承时,LoadError
出现了:
Unable to autoload constant Base, expected xxx/app/urls/base.rb to define it
我已经调试了一下,文件是正确的来源并加载了类,但检查是错误的。当ActiveSupport::Dependencies#const_missing
作为Object
(< - 这是预期包含常量的变量)而不是from_mod
时,错误似乎出现在Url
中。
试试这个:
Url::Base # Raise LoadError
Url::Base # Works!
我仍然无法理解为什么const_missing
触发Object
而不是Url
...有些帮助?我做错了什么?
修改
好的,通过更多的挖掘,我明白了发生了什么。 Rails在namespace/class_name.rb
中搜索文件的路径,如PATH
;如果此文件不存在,它会尝试在父模块(或类)中加载常量,这就是它将使用form_model = Object
递归的原因。
答案 0 :(得分:0)
好的,通过更多的挖掘,我明白了发生了什么。 Rails在namespace/class_name.rb
中搜索文件的路径,如PATH
;如果此文件不存在,它会尝试在父模块(或类)中加载常量,这就是它将使用form_model = Object
递归的原因。