ルート/リソースおよびコントローラーでエラーが発生しています。
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)
「新しい」ビューにリンクするとき。
Users::ScheduleController
ではなく、SchedulesController
である必要があります。コントローラーは、ルートが namespace
で名前空間化 の場合にのみ名前空間化される必要があります。コントローラー名も常に複数にする必要があります。
作成しているのは、名前空間付きではなく nestedリソース です。
SchedulesController
のネームスペースは意図的ですか?つまり、reallyこれを行うつもりですか?
_class Users::SchedulesController < ApplicationController
_
それとも、スケジュールはユーザーからの「サブモノ」であるため、あなたはそれをしているだけですか?
私がこれを尋ねる理由は、通常、Rails内では、ネストされたリソースコントローラーare n't名前空間です。ネームスペースの下で特別な方法でコントローラーを変更する場合にのみ、コントローラーのネームスペースを作成します。これの一般的な例は、管理者のみがそれらのコントローラーにアクセスすることを制限する、その名前空間内のBaseController
から継承する、管理名前空間の下にいくつかのコントローラーを持つことです。
意図的ではないこのコントローラーの名前空間を使用する場合、コントローラーから_Users::
_プレフィックスを削除し、それを_app/controllers/schedules_controller.rb
_に戻し、ヘルパーを_app/helpers/schedules_helper.rb
_および_app/views/schedules
_に戻るビュー。おそらく_Users::Schedule
_モデルも生成するジェネレーターを実行しましたが、これもSchedule
に名前を変更し、_app/models/schedule.rb
_に戻す必要があります。
意図的に行ったこのコントローラーの名前空間の場合、ルートでこれを実行する必要があります。
_namespace :users do
resources :schedules
end
_
生成されたものはすべてそのままにしておきます。
Routes.rbで、次のようにコントローラーを指定する必要があります。
resources :users do resource :schedules, controller: 'users/shedules' end
リソース:usersを名前空間:usersに置き換えます
スケジュールコントローラーはユーザーフォルダー内にあるためです。 class Users :: ScheduleController <ApplicationController#ここにコントローラーメソッド... end