I'm trying to organize my Rails application into two namespaces that provide the same resources, but with different controllers and views. Something like the following cenario:
routes.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
Using scaffold, I've created the controllers structure:
rails g controller api/beehives
rails g controller api/beehives/bees
rails g controller api/beehives/honeycombs
And the folder structure I got for controllers sounds like this:
+ 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 
Well, that was easy. In this context, /beehives/1 will route to root namespace (intended for the web application) and /api/beehives/1 to the "api" namespace (intended for providing a RESTful webservice). That's working really fine. The problem is when I try to access /api/beehives/1/bees, for some reason, the namespacing is not applying to the nested resource and Rails spit this error:
uninitialized constant Api::BeesController
What I'm doing wrong?
resources :beehive + nested resources :bees doesn't require your respective controllers to be nested too. It's just a way of constructing URLs. So, it's naturally that your app asks for   Api::BeesController instead of Api::Beehives::BeesController.
If you have any doubts, use rake routes command to check your routes and their associated controllers.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With