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が認識しているクラスを指していません。それに admin 名前空間を与える必要があります(BaseController のクラス定義にもあるように)

class Admin::UsersController < Admin::BaseController
end

上記と質問の作業コードは同じものです

module Admin
  class UsersController < BaseController
  end
end
于 2012-08-08T14:36:15.440 に答える