Ruby on rails Rails 4.1无法自动加载命名空间类

Ruby on rails Rails 4.1无法自动加载命名空间类,ruby-on-rails,autoloader,Ruby On Rails,Autoloader,我已经为嵌套资源的URL做了一个帮助程序 # app/urls/url.rb module Url; end 然后 当我尝试从Url::Base继承时,会出现LoadError: Unable to autoload constant Base, expected xxx/app/urls/base.rb to define it 我对它进行了一点调试,文件的源代码正确,类已加载,但检查中有错误。这个错误似乎是在ActiveSupport::Dependencies>const\u miss

我已经为嵌套资源的URL做了一个帮助程序

# app/urls/url.rb
module Url; end
然后

当我尝试从
Url::Base
继承时,会出现
LoadError

Unable to autoload constant Base, expected xxx/app/urls/base.rb to define it

我对它进行了一点调试,文件的源代码正确,类已加载,但检查中有错误。这个错误似乎是在
ActiveSupport::Dependencies>const\u missing
中产生的,当它从
的形式传递
对象时(好的,通过进一步挖掘,我已经了解了发生的事情。Rails在
路径中搜索文件路径,如
名称空间/class_name.rb
;如果该文件不存在,它会尝试在父模块(或类)中加载常量),这就是为什么它会随着
form_model=Object

递归。你如何加载“app/url”中的内容?还有:你确定这是一个确切的错误吗?因为你的模块是单数,但文件夹是复数的。如果我没记错的话,因为Rails 3“app/”下的每个文件夹都包含在PATH中,所以是的,它是正确的。你还可以看到正确的文件来源于异常的消息,这就是为什么如果你第二次调用它,它会工作的原因。我遇到了相同的错误。更好的是,如果我将类(例如你的
url
class)移动到
lib
文件夹,所有的工作都会正常:(@AndréHerculano在我的例子中,错误是使用“url”代替“url”在路径中。它必须反映名称空间,因此如果类的全名为“Example::Test”,则其路径必须为“app/Example/Test.rb”。这是否更清楚一些?:)如果您不想在app/lib下移动内容(因为lib可能包含其他类)您可以创建一个目录,比如app/namespaced/并将所有内容嵌套在其中-例如app/namespaced/url/base.rb(我认为您需要在目录名中使用'url'而不是'url',否则自动加载程序将无法工作)。
Unable to autoload constant Base, expected xxx/app/urls/base.rb to define it
Url::Base # Raise LoadError
Url::Base # Works!