假设我有以下文件:
|- 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中是否有与上述语句等效的方法?