gpt4 book ai didi

ruby-on-rails - 带有嵌套资源的命名空间 Rails 3.2.8

转载 作者:行者123 更新时间:2023-12-04 05:49:39 25 4
gpt4 key购买 nike

我正在尝试将我的 Rails 应用程序组织到两个命名空间中,这些命名空间提供相同的资源,但具有不同的 Controller 和 View 。类似于以下场景:
路线.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
使用脚手架,我创建了 Controller 结构:

rails g controller api/beehives

rails g controller api/beehives/bees

rails g controller api/beehives/honeycombs


我为 Controller 获得的文件夹结构听起来像这样:
+ app
+ controllers
- beehives_controller.rb
- bees_controller.rb
- honeycombs_controller.rb
+ api
- beehives_controller.rb
+ beehives
- bees_controller.rb
- honeycombs_controller.rb
Controller /beehives_controller.rb
class Api::BeehivesController < ApplicationController 
Controller /api/beehives_controller.rb
class Api::BeehivesController < ApplicationController 
Controller /api/beehives/bees_controller.rb
class Api::Beehives::BeesController < ApplicationController 
嗯,这很容易。在这种情况下, /beehives/1将路由到根命名空间(用于 Web 应用程序)和 /api/beehives/1到“api”命名空间(用于提供 RESTful 网络服务)。这工作得很好。问题是当我尝试访问 /api/beehives/1/bees 时,出于某种原因,命名空间不适用于嵌套资源,Rails 吐出这个错误:
uninitialized constant Api::BeesController
我做错了什么?

最佳答案

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

如果您有任何疑问,请使用 rake routes命令来检查您的路由及其关联的 Controller 。

关于ruby-on-rails - 带有嵌套资源的命名空间 Rails 3.2.8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12846055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com