具有嵌套资源的命名空间Rails 3.2.8

时间:2012-10-11 18:18:25

标签: ruby-on-rails resources namespaces routes nested

我正在尝试将我的Rails应用程序组织到两个名称空间中,这两个名称空间提供相同的资源,但具有不同的控制器和视图。类似下面的内容:

的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

使用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

控制器/ beehives_controller.rb

class Api::BeehivesController < ApplicationController 

控制器/ API / beehives_controller.rb

class Api::BeehivesController < ApplicationController 

控制器/ API /蜂箱/ 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

我做错了什么?

1 个答案:

答案 0 :(得分:5)

resources :beehive +嵌套resources :bees也不需要嵌套您的控制器。这只是构建URL的一种方式。因此,您的应用自然会要求Api::BeesController而不是Api::Beehives::BeesController

如果您有任何疑问,请使用rake routes命令检查您的路线及其相关控制器。

相关问题