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

Moh*_*mad 2 ruby routing namespaces ruby-on-rails

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

  namespace :admin do
    resources :users
    resources :base
  end
Run Code Online (Sandbox Code Playgroud)

使用以下目录结构:

/app/controllers/
        + admin
            - base_controller.rb
            - users_controller.rb
        - users_controller.rb
        - application_controller.rb
Run Code Online (Sandbox Code Playgroud)

我必须包装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
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?使用Rails 3.2.

dee*_*our 7

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

class Some::DeeplyNested::BaseActionsController < ApplicationController
Run Code Online (Sandbox Code Playgroud)

需要app/controllers/some/deeply_nested/base_actions_controller.rb让铁路找到它.

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

class Admin::UsersController < BaseController
Run Code Online (Sandbox Code Playgroud)

指出没有Rails知道的类.你需要给它管理命名空间(因为你的BaseController的类定义也有)

class Admin::UsersController < Admin::BaseController
end
Run Code Online (Sandbox Code Playgroud)

以上和您的问题中的工作代码是同一个

module Admin
  class UsersController < BaseController
  end
end
Run Code Online (Sandbox Code Playgroud)