我有一个管理员命名空间:
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。
答案 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