私は、いくつかのタイプの「予定」を持つことができる「患者」を備えた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が正しく解析されていないようです。
私はすでにこれに数時間を投資しました。誰かがそれを修正する方法について何か指針を持っているなら、私は非常に感謝するでしょう。