2

我有一个这样的管理命名空间:

  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。

4

1 回答 1

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
于 2012-08-08T14:36:15.440 回答