我有2个班级
位于MyController
下的 app/controllers/api
位于MyManager
libs/managers
我正在尝试从我的控制器中使用此管理器类,并且我收到以下错误。
未初始化的常量API :: MyController :: MyManager
如何在MyController类中引用和使用MyManager类?
控制器
class API::MyController < API::BaseController
before_action :setup
def something
@myManager.doSomething
end
def setup
# Exception is thrown here
@myManager = MyManager.new
end
end
管理器
class MyManager
def doSomething
puts('something')
end
end
答案 0 :(得分:1)
确保自动加载了lib / managers目录:
# in config/application.rb
config.autoload_paths += %W(#{config.root}/lib/managers)
如果MyManager是一个类(不是模块),那么你可以毫无问题地调用MyManager.new。
也只是一张纸条。在Rails 4中,在app / controllers和app / models(app / controllers / concern和app / models / concerns)下添加了几个'关注'目录。这些目录下的任何文件都将自动加载。根据标准,只有模型相关的问题(无论是模块还是类)将被置于app / models / concern(同样适用于控制器相关的问题)。
答案 1 :(得分:0)
这与rails加载模块的方式有关,请查看this
我认为你想要的是确保自动加载lib目录,然后调用::MyManager.method
,因为它试图从Controller上下文中获取模块。
::Module
表示绝对模块。