Ich habe einen Fehler mit meinen Routen/Ressourcen und Controllern.
Ich habe folgendes in der route.rb:
# routes.rb
resources :users do
resource :schedule
end
Und ich habe eine schedule_controller.rb in Controllern/Benutzern/so eingerichtet, wie ich denke, es sollte sein:
class Users::ScheduleController < ApplicationController
# Controller methods here...
end
Einen Rechen ausführen: Routenshows
user_schedule POST /users/:user_id/schedule(.:format) schedules#create
new_user_schedule GET /users/:user_id/schedule/new(.:format) schedules#new
edit_user_schedule GET /users/:user_id/schedule/edit(.:format) schedules#edit
GET /users/:user_id/schedule(.:format) schedules#show
PUT /users/:user_id/schedule(.:format) schedules#update
Wenn Sie zu/users /: user_id/schedule navigieren, wird der folgende Fehler zurückgegeben:
uninitialized constant SchedulesController
Meine einzige Überlegung, was das Problem sein könnte, ist etwas mit verschachtelten Ressourcen oder dem Deklarieren einer einzelnen Ressource zu tun, und ich gehe irgendwo falsch.
Ich benutze den Helfer
new_user_schedule_path(current_user)
beim Linken zu meiner "neuen" Ansicht.
Es sollte SchedulesController
sein, nicht Users::ScheduleController
. Controller sollten nur dann einen Namensraum haben, wenn die Route Namensbereich mit namespace
ist. Controller-Namen sollten auch immer Plural sein.
Was Sie erstellen, ist eine nested - Ressource , keine Namespaces.
Ist der Namensraum des SchedulesController
beabsichtigt? d.h. meinst du wirklich dies zu tun?
class Users::SchedulesController < ApplicationController
Oder machst du das nur, weil Zeitpläne eine "Untersache" von Benutzern sind?
Ich frage dies, weil verschachtelte Ressourcencontroller in Rails normalerweise keinen Namensraum haben. Sie würden einen Controller nur dann mit einem Namespace versehen, wenn Sie die Controller unter einem Namespace auf besondere Weise ändern möchten. Ein häufiges Beispiel hierfür ist, dass einige Controller unter einem Administrator-Namespace stehen und von einem BaseController
in diesem Namespace erben, wodurch nur Administratoren daran gehindert werden, auf diese Controller zuzugreifen.
Wenn Sie diesen Controller nicht absichtlich mit einem Namespace versehen haben, möchten Sie das Users::
-Präfix von Ihrem Controller entfernen und es zurück in app/controllers/schedules_controller.rb
verschieben Helfer zurück zu app/helpers/schedules_helper.rb
und die Ansichten zurück zu app/views/schedules
. Möglicherweise haben Sie einen Generator ausgeführt, der auch ein Users::Schedule
-Modell generiert hat, das ebenfalls in Schedule
umbenannt und zurück in app/models/schedule.rb
verschoben werden muss.
Wenn Sie diesen Controller absichtlich mit einem Namensraum versehen haben, möchten Sie dies auf Ihren Routen tun:
namespace :users do
resources :schedules
end
Lassen Sie alles, was generiert wurde, so, wie es sein sollte.
In Ihrer routes.rb müssen Sie den Controller folgendermaßen angeben:
resources :users do
resource :schedules, controller: 'users/shedules'
end
ressourcen ersetzen: Benutzer in Namespace: Benutzer
Ihr Zeitplan-Controller befindet sich im Benutzerordner . Class Users :: ScheduleController <ApplicationController # Controller-Methoden hier ... Ende