Estoy tratando de organizar mi aplicación Rails en dos espacios de nombres que proporcionan los mismos recursos, pero con diferentes controladores y vistas. Algo así como lo siguiente cenario:Espacios de nombres con recursos anidados Rails 3.2.8
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
El uso de andamios, he creado la estructura de los controladores:
rails g controller api/beehives
rails g controller api/beehives/bees
rails g controller api/beehives/honeycombs
Y la estructura de carpetas que tengo para controladores suena como esto:
controladores/beehives_controller.rb
class Api::BeehivesController < ApplicationController
controladores/api/beehives_controller.rb
class Api::BeehivesController < ApplicationController
controladores/api/colmenas/bees_controller.rb
class Api::Beehives::BeesController < ApplicationController
Bueno, eso fue fácil. En este contexto, /beehives/1
se enrutará al espacio de nombre raíz (destinado a la aplicación web) y /api/beehives/1
al espacio de nombres "api" (destinado a proporcionar un servicio web RESTful). Eso está funcionando realmente bien. El problema es cuando intento acceder /api/beehives/1/bees
, por alguna razón, el namespacing no está aplicando al recurso anidado y rieles escupir este error:
uninitialized constant Api::BeesController
Lo que estoy haciendo mal?
Funcionó. ¡Gracias! – derekstavis
Pero oye @jdoe, esto rompió la estructura de mi carpeta. Tuve que poner los controladores relacionados dentro de la carpeta 'api', en lugar de' api/beehives'. Eso rompe mi organización porque dentro de la carpeta 'api' tendré más de un recurso para proporcionar. – derekstavis
@DerekWillianStavis 'resources' acepta la opción': module => 'behives''. También puede usar 'scope: module => 'behives' do ... end' wrapper para su recurso anidado. – jdoe