2012-08-08 103 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