Próbuję zorganizować moją aplikację Rails w dwóch obszarach nazw, które zapewniają te same zasoby, ale z różnymi kontrolerami i widokami. Coś jak na poniższym cenario:Przestrzenie nazw z zasobami zagnieżdżonymi 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
Korzystanie rusztowanie, I utworzeniu struktury regulatorów:
rails g controller api/beehives
rails g controller api/beehives/bees
rails g controller api/beehives/honeycombs
a struktura folderów dostałem kontrolerów brzmi jak to:
controllers/beehives_controller.rb
class Api::BeehivesController < ApplicationController
controllers/api/beehives_controller.rb
class Api::BeehivesController < ApplicationController
controllers/api/ule/bees_controller.rb
class Api::Beehives::BeesController < ApplicationController
dobrze, to było łatwe. W tym kontekście /beehives/1
spowoduje przejście do głównej przestrzeni nazw (przeznaczonej dla aplikacji internetowej) i /api/beehives/1
do przestrzeni nazw "api" (przeznaczonej do świadczenia usługi internetowej RESTful). To działa naprawdę dobrze. Problem jest, gdy próbuję dostęp /api/beehives/1/bees
, z jakiegoś powodu, Przestrzenie nazw nie ubiega się zasobu zagnieżdżonego Rails i pluć ten błąd:
uninitialized constant Api::BeesController
Co robię źle?
Zadziałało. Dzięki! – derekstavis
Ale hej @ jdoe, to złamało moją strukturę folderów. Musiałem umieścić powiązane kontrolery wewnątrz folderu 'api', zamiast' api/ule'. To łamie moją organizację, ponieważ w folderze 'api' będę miał więcej niż jeden zasób. – derekstavis
"Zasoby' DerekWillianStavis 'akceptuje opcję': module => 'behives''. Możesz także użyć 'scope: module => 'zachowuje' do ... koniec' opakowania dla twojego zagnieżdżonego zasobu. – jdoe