假设我有以下文件:
|- app
| |- helpers
| | |- application_helper.rb
|- config
|- |- application.rb
|- lib
| |- my_module
| | |- my_class.rb
我正在尝试让 Rails 自动加载my_module
。在application.rb
我设置
config.autoload_paths += %W(#{config.root}/lib)
我还设法获得了一个秘密知识,即为了使自动加载工作,模块和类的名称必须与目录和文件的名称匹配,所以my_class.rb
看起来像这样:
module MyModule
class MyClass
# ...
end
end
现在我想MyClass
在我的application_helper.rb
:
module ApplicationHelper
include MyModule
def some_method(active_entry = nil)
someobject = MyClass.new
#...
end
end
但我收到一个错误
uninitialized constant ApplicationHelper::MyClass
为了使这段代码工作,我必须更换
someobject = MyClass.new
和
someobject = MyModule::MyClass.new
这是丑陋的。我认为它include
会像 C++ using namespace
、 C#using
或 Java一样工作,import
但显然不是。那么Ruby中是否有与上述语句等效的方法?