Je rencontre une erreur avec mes routes/ressources et contrôleurs.
J'ai les éléments suivants dans le fichier routes.rb:
# routes.rb
resources :users do
resource :schedule
end
Et j'ai un schedule_controller.rb à l'intérieur des contrôleurs/utilisateurs/mis en place comme je pense qu'il devrait être:
class Users::ScheduleController < ApplicationController
# Controller methods here...
end
Lancer un rake: itinéraires spectacles
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
Cependant, en accédant à/users /: user_id/schedule renvoie l'erreur suivante:
uninitialized constant SchedulesController
Ma seule pensée sur le problème qui pourrait se poser est que cela a quelque chose à voir avec les ressources imbriquées ou la déclaration d'une ressource unique et que je me trompe quelque part.
J'utilise l'aide
new_user_schedule_path(current_user)
lors de la liaison à ma "nouvelle" vue.
Ce devrait être SchedulesController
, pas Users::ScheduleController
. Les contrôleurs ne doivent être nommés que lorsque la route est namespaced avec namespace
. Les noms de contrôleurs doivent également toujours être au pluriel.
Ce que vous créez est une ressource nested , et non pas un espace de noms.
Le nom de la variable SchedulesController
est-il intentionnel? c'est-à-dire vraiment avez-vous l'intention de faire cela?
class Users::SchedulesController < ApplicationController
Ou faites-vous cela uniquement parce que les horaires sont une "sous-chose" des utilisateurs?
La raison pour laquelle je pose cette question est parce que généralement, dans Rails, les contrôleurs de ressources imbriqués ne sont pas namespaced. Si vous souhaitez modifier les contrôleurs de manière spéciale sous un espace de nom, vous ne souhaitez modifier un contrôleur d'espace de noms. Un exemple courant serait d'avoir certains contrôleurs sous un espace de noms d'administrateur, héritant d'une variable BaseController
au sein de cet espace de noms, qui empêcherait uniquement les administrateurs d'accéder à ces contrôleurs.
Si vous n'avez pas intentionnellement namespace ce contrôleur, vous souhaitez supprimer le préfixe Users::
de votre contrôleur et le ramener à app/controllers/schedules_controller.rb
, les aides à app/helpers/schedules_helper.rb
et les vues à app/views/schedules
. Peut-être avez-vous exécuté un générateur qui a également généré un modèle Users::Schedule
, qui devrait également être renommé en Schedule
et redescendu en app/models/schedule.rb
.
Si vous avez intentionnellement namespace ce contrôleur, alors vous voulez le faire dans vos routes:
namespace :users do
resources :schedules
end
Laissez tout ce qui a été généré comme il se doit.
Dans votre fichier routes.rb, vous devez spécifier le contrôleur de la manière suivante:
resources :users do
resource :schedules, controller: 'users/shedules'
end
remplacer les ressources: utilisateurs en namespace: utilisateurs
Parce que votre contrôleur de planification se trouve dans le dossier users . Class Users :: ScheduleController <ApplicationController # Méthodes de contrôleur ici ... Fin