6

Railsアプリケーションを、同じリソースを提供するが、コントローラーとビューが異なる2つの名前空間に編成しようとしています。次の風景のようなもの:

ルート.rb

resources :beehives do
    resources :bees
    resources :honeycombs
end

namespace :api do
    resources :beehive, only: [:show] do
        resources :bees, only: [:index, :show]
        resources :honeycombs, only: [:index, :show]
    end
end

足場を使用して、コントローラー構造を作成しました。

rails g controller api / beehives

rails g controller api / beehives / bees

railsgコントローラーapi/beehives / honeycombs

そして、コントローラー用に取得したフォルダー構造は次のようになります。

+ app
  + controllers
    - beehives_controller.rb
    - bees_controller.rb
    - honeycombs_controller.rb
    + api
      - beehives_controller.rb
      + beehives
        - bees_controller.rb
        - honeycombs_controller.rb

controllers / beehives_controller.rb

class Api::BeehivesController < ApplicationController 

controllers / api / beehives_controller.rb

class Api::BeehivesController < ApplicationController 

controllers / api / beehives / bees_controller.rb

class Api::Beehives::BeesController < ApplicationController 

まあ、それは簡単でした。このコンテキストでは、/beehives/1はルート名前空間(Webアプリケーション用)と/api/beehives/1「api」名前空間(RESTful Webサービスの提供用)にルーティングします。それは本当にうまくいっています。/api/beehives/1/bees問題は、何らかの理由でアクセスしようとすると、名前空間がネストされたリソースに適用されず、Railsがこのエラーを吐き出すことです。

uninitialized constant Api::BeesController

私が間違っているのは何ですか?

4

1 に答える 1

5

resources :beehive+ネストされresources :beesている場合、それぞれのコントローラーもネストされている必要はありません。これは、URLを作成する方法にすぎません。したがって、アプリがの Api::BeesController代わりに要求するのは当然ですApi::Beehives::BeesController

疑問がある場合は、rake routesコマンドを使用してルートとそれに関連するコントローラーを確認してください。

于 2012-10-11T18:48:04.827 に答える