1. ホーム
  2. ruby-on-rails

[解決済み] 未初期化の定数 "コントローラ名"

2022-02-16 17:22:16

質問

ルート/リソースとコントローラでエラーが発生します。

routes.rbに以下のように記述しています。

# routes.rb
resources :users do  
  resource :schedule  
end

そして、controllers/users/の中にあるschedule_controller.rbを私が思うように設定しています。

class Users::ScheduleController < ApplicationController

  # Controller methods here...

end

rake:routesを実行すると

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

しかし、/users/:user_id/scheduleに移動すると、以下のエラーが返されます。

uninitialized constant SchedulesController

この問題は、ネストされたリソースや単一のリソースの宣言に関係するもので、私がどこかで間違っている可能性があるとしか思えません。

ヘルパーを使用しています。

new_user_schedule_path(current_user)

私の「新しい」ビューにリンクしているとき。

解決方法は?

次のようになります。 SchedulesController ではなく Users::ScheduleController . コントローラの名前空間を指定するのは、ルートが で名前空間化されています。 namespace . また、コントローラ名は常に複数形である必要があります。

作成しているのは ネストされた リソース であり、名前空間的なものではありません。