der*_*vis 6 resources routes nested namespaces ruby-on-rails
我正在尝试将我的Rails应用程序组织到两个名称空间中,这两个名称空间提供相同的资源,但具有不同的控制器和视图.类似下面的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
Run Code Online (Sandbox Code Playgroud)
使用scaffold,我创建了控制器结构:
rails g controller api/beehives
rails g controller api/beehives/bees
rails g controller 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
Run Code Online (Sandbox Code Playgroud)
控制器/ beehives_controller.rb
class Api::BeehivesController < ApplicationController
Run Code Online (Sandbox Code Playgroud)
控制器/ API/beehives_controller.rb
class Api::BeehivesController < ApplicationController
Run Code Online (Sandbox Code Playgroud)
控制器/ API /蜂箱/ bees_controller.rb
class Api::Beehives::BeesController < ApplicationController
Run Code Online (Sandbox Code Playgroud)
嗯,这很容易.在此上下文中,/beehives/1将路由到根命名空间(用于Web应用程序)和/api/beehives/1"api"命名空间(用于提供RESTful Web服务).这工作得很好.问题是当我尝试访问时/api/beehives/1/bees,由于某种原因,命名空间不适用于嵌套资源而Rails吐出此错误:
uninitialized constant Api::BeesController
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
resources :beehive+嵌套resources :bees也不需要嵌套各自的控制器.这只是构建URL的一种方式.所以,你的应用程序自然会要求 Api::BeesController而不是Api::Beehives::BeesController.
如果您有任何疑问,请使用rake routes命令检查您的路线及其相关控制器.
| 归档时间: |
|
| 查看次数: |
3538 次 |
| 最近记录: |