2012-08-08 115 views
2

当Uinitialized恒定BaseController错误我有一个管理名字空间作为例如:使用admin命名空间

namespace :admin do 
    resources :users 
    resources :base 
    end 

用下面的目录结构:

/app/controllers/ 
     + admin 
      - base_controller.rb 
      - users_controller.rb 
     - users_controller.rb 
     - application_controller.rb 

我有一个module Admin end包裹admin/users_conroller.rb,否则我得到一个Uninitialized constant BaseController错误:

class Admin::BaseController < ApplicationController 
end 

# Works fine 
module Admin 
    class UsersController < BaseController 
    end 
end 

# Breaks with error 
class Admin::UsersController < BaseController 
end 

任何想法为什么发生这种情况?使用Rails 3.2。

回答

7

命名空间映射到目录,下划线的文件名被映射为类名称。

class Some::DeeplyNested::BaseActionsController < ApplicationController 

需要在app/controllers/some/deeply_nested/base_actions_controller.rb的轨道找到它。

在你的代码,没有app/controllers/base_controller.rb,所以BaseController

class Admin::UsersController < BaseController 

点,没有阶级的Rails知道。你需要给它的命名空间管理(作为BaseController类定义中也有)

class Admin::UsersController < Admin::BaseController 
end 

上面和你的工作代码从你的问题是在同一个

module Admin 
    class UsersController < BaseController 
    end 
end 
+0

+1一个很好的解释! – Mohamad 2012-08-08 14:48:22

+0

我有一个类似的问题,值得注意的是,命名空间目录中的情况应该是小写的。 – 2013-05-03 10:11:31

+0

@RichardHollis有没有这样的情况,当**不是**真? – deefour 2013-05-03 11:22:28