我正在尝试将我的 Rails 应用程序组织到两个提供相同资源但具有不同控制器和视图的命名空间中。类似于以下场景:
路线.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 控制器 api/蜂箱
rails g 控制器 api/蜂箱/蜜蜂
rails g 控制器 api/蜂箱/蜂窝
我为控制器获得的文件夹结构听起来像这样:
+ app
+ controllers
- beehives_controller.rb
- bees_controller.rb
- honeycombs_controller.rb
+ api
- beehives_controller.rb
+ beehives
- bees_controller.rb
- honeycombs_controller.rb
控制器/beehives_controller.rb
class Api::BeehivesController < ApplicationController
控制器/api/beehives_controller.rb
class Api::BeehivesController < ApplicationController
控制器/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
我做错了什么?