【发布时间】:2012-11-29 22:52:54
【问题描述】:
假设我有以下文件:
|- 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
现在我想在我的application_helper.rb 中使用MyClass:
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 中是否有与上述语句等价的语句?
【问题讨论】:
标签: ruby-on-rails ruby