Ruby - 访问不在当前范围内的类?

时间:2014-06-28 22:50:57

标签: ruby-on-rails ruby

我有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

2 个答案:

答案 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表示绝对模块。