20

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

私は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)

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

4

4 に答える 4

20

SchedulesControllerではないはずUsers::ScheduleControllerです。コントローラは、ルートnamespace. コントローラー名も常に複数形にする必要があります。

作成しているのは、名前空間ではなく、ネストされたリソースです。

于 2012-10-29T04:05:32.353 に答える
5

ネームスペースはSchedulesController意図的なものですか?つまり、本当にこれを行うつもりですか?

class Users::SchedulesController < ApplicationController

それとも、スケジュールはユーザーの「サブもの」であるため、そうしているだけですか?

これを尋ねる理由は、通常、Rails 内では、ネストされたリソース コントローラーに名前空間が設定されていないためです。名前空間の下で特別な方法でコントローラーを変更したい場合にのみ、コントローラーの名前空間を設定します。これの一般的な例は、管理者名前空間の下にいくつかのコントローラーを持ち、BaseControllerその名前空間内から継承して、管理者のみがそれらのコントローラーにアクセスすることを制限することです。

オプション1

このコントローラに意図的に名前空間を設定しなかった場合はUsers::、コントローラからプレフィックスを削除して に戻しapp/controllers/schedules_controller.rb、ヘルパーを に戻しapp/helpers/schedules_helper.rb、ビューを に戻す必要がありapp/views/schedulesます。Users::Scheduleおそらく、モデルも生成するジェネレーターを実行した可能性があります。このモデルも に名前を変更しSchedule、元に戻す必要がありapp/models/schedule.rbます。

オプション 2

このコントローラーに意図的に名前を付ける場合は、ルートでこれを行います。

namespace :users do
  resources :schedules
end

生成されたものはすべてそのままにしておきます。

于 2012-10-29T04:05:24.383 に答える