使用admin命名空间时未初始化的常量Base Controller错误

时间:2012-08-08 14:25:28

标签: ruby-on-rails ruby routing namespaces

我有一个管理员命名空间:

  namespace :admin do
    resources :users
    resources :base
  end

使用以下目录结构:

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

我必须将admin/users_conroller.rb包裹在module Admin end中,否则会出现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。

1 个答案:

答案 0 :(得分:7)

命名空间映射到目录,下划线的文件名是为类名提供的。

class Some::DeeplyNested::BaseActionsController < ApplicationController

需要在app/controllers/some/deeply_nested/base_actions_controller.rb中才能让rails找到它。

在您的代码中,没有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