0

私は、いくつかのタイプの「予定」を持つことができる「患者」を備えたrails3.2.2アプリを持っています。だから私は次のルートを作りました:

# config/routes.rb
resources :patients do
  namespace :appointments do
    resources :default, :except => [:index]                                           
    resources :pilates, :except => [:index]
  end
end

関連するrake routes出力:

patient_appointments_default_index POST   /patients/:patient_id/appointments/default(.:format)          appointments/default#create
  new_patient_appointments_default GET    /patients/:patient_id/appointments/default/new(.:format)      appointments/default#new
 edit_patient_appointments_default GET    /patients/:patient_id/appointments/default/:id/edit(.:format) appointments/default#edit
      patient_appointments_default GET    /patients/:patient_id/appointments/default/:id(.:format)      appointments/default#show
                                   PUT    /patients/:patient_id/appointments/default/:id(.:format)      appointments/default#update
                                   DELETE /patients/:patient_id/appointments/default/:id(.:format)      appointments/default#destroy
patient_appointments_pilates_index POST   /patients/:patient_id/appointments/pilates(.:format)          appointments/pilates#create
  new_patient_appointments_pilates GET    /patients/:patient_id/appointments/pilates/new(.:format)      appointments/pilates#new
 edit_patient_appointments_pilates GET    /patients/:patient_id/appointments/pilates/:id/edit(.:format) appointments/pilates#edit
      patient_appointments_pilates GET    /patients/:patient_id/appointments/pilates/:id(.:format)      appointments/pilates#show
                                   PUT    /patients/:patient_id/appointments/pilates/:id(.:format)      appointments/pilates#update
                                   DELETE /patients/:patient_id/appointments/pilates/:id(.:format)      appointments/pilates#destroy

レールインフレクターで「デフォルト」と「ピラティス」を数えられないように追加する必要があることに注意してください。それ以外の場合は、「defaults」という名前のルートと「pilate」という名前のルートがあります。

#config/initialize/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w( default pilates )
end

私の問題は、私が作成した「新しい」アクションリンクが「表示」アクションで解決されることです。たとえば、これは次のとおりです。

link_to "Add", new_patient_appointments_default_path(@patient)

この(有効な、IMHO)URLを生成します:

/patients/14/appointments/default/new

しかし、それをクリックすると、次のエラーが発生します。

Started GET "/patients/14/appointments/default/new" for 127.0.0.1 at 2012-06-18 11:29:31 +0200
Processing by Appointments::DefaultController#new as HTML
  Parameters: {"patient_id"=>"14"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  Patient Load (0.2ms)  SELECT "patients".* FROM "patients" WHERE "patients"."id" = ? LIMIT 1  [["id", "14"]]
  ...
Completed 500 Internal Server Error in 512ms

ActionController::RoutingError (No route matches {
  :action => "show",
  :controller => "appointments/default",
  :patient_id => #<Patient id: 14, ...>,
  :id => #<Appointments::Default id: nil, ...>})

私は明白なことをチェックしました。@patientオブジェクトはnilではなく、「一括割り当ての問題」はなく、権限の問題でもありません。コントローラは「新しい」アクションを受信して​​おらず、エラーを検出して「表示」などにリダイレクトしていません。

URLが正しく解析されていないようです。

私はすでにこれに数時間を投資しました。誰かがそれを修正する方法について何か指針を持っているなら、私は非常に感謝するでしょう。

4

1 に答える 1

0

謝罪いたします。

「新しい」アクションの簡単な「テキストのみ」のビューをレンダリングしてみましたが、うまくいきました。だから今、私はそれが「新しい」ビューのエラーだと思います。Railsがエラーについて教えてくれるのではなく、なぜ「show」ビューをレンダリングしようとしたのかはまだわかりません。でもここからは仕事ができると思います。SOが私に許可するとすぐにこの答えを閉じます。

于 2012-06-18T09:47:00.770 に答える