Ich versuche, meine Rails-Anwendung in zwei Namespaces zu organisieren, die dieselben Ressourcen, aber mit unterschiedlichen Controllern und Sichten bereitstellen. So etwas wie die folgende zenario:Namespaces mit verschachtelten Ressourcen 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
Gerüst verwenden, ich habe die Controller-Struktur erstellt:
rails g controller api/beehives
rails g controller api/beehives/bees
rails g controller api/beehives/honeycombs
Und die Ordnerstruktur I für Controller bekam klingt wie dies:
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
Nun, das war einfach. In diesem Kontext wird /beehives/1
an den Root-Namespace (für die Webanwendung) und /api/beehives/1
an den Namespace "api" (für die Bereitstellung eines RESTful-Webdienstes) weitergeleitet. Das funktioniert wirklich gut. Das Problem ist, wenn ich versuchen, zuzugreifen /api/beehives/1/bees
, aus irgendeinem Grund wird die Namespacing auf die verschachtelte Ressource nicht anwenden und Rails spucken diesen Fehler:
uninitialized constant Api::BeesController
Was mache ich falsch?
Es hat funktioniert. Vielen Dank! – derekstavis
Aber hey @jdoe, das hat meine Ordnerstruktur kaputt gemacht. Ich musste die entsprechenden Controller in "api" -Ordner stellen, anstatt "api/Bienenkörbe". Das zerbricht meine Organisation, weil ich im Ordner "api" mehr als eine Ressource bereitstellen muss. – derekstavis
@DerekWillianStavis 'Ressourcen' akzeptiert': modul => 'Behives'-Option. Sie können auch 'scope: module => 'behives' do ... end 'wrapper für Ihre verschachtelte Ressource verwenden. – jdoe