2010-11-11 20 views
0

Je suis face à un problème que je ne peux pas expliquer:/Ruby on Rails 3, inexplicables « Route ne correspond pas à »

J'ai créé un itinéraire pour une action spécifique. Et il apparaît dans rake routes résultat:

update_attendance_admin_module_instance_activity_instance_list 
POST 
/admin/module_instances/:module_instance_id/activity_instances/:activity_instance_id/lists/:id/update_attendance(.:format) 
{:action=>"update_attendance", :controller=>"admin/lists"} 

Cette action si suppose de traiter une demande de formulaire:

= form_for @upload, :url => {:controller => 'admin/lists', :action => 'update_attendance', :id => @upload.id} 

BTW: J'ai essayé aussi d'utiliser l'aide update_attendance_admin_module_instance_activity_instance_list_path mais il est très verbeux et n » Je ne travaille pas non plus.

Ensuite, lorsque le formulaire est soumis:

Started POST "/admin/module_instances/2/activity_instances/2/lists/1/update_attendance" for 127.0.0.1 at 2010-11-11 11:16:48 +0100 

ActionController::RoutingError (No route matches "/admin/module_instances/2/activity_instances/2/lists/1/update_attendance"): 

Une URL généré avec succès grâce à une aide de chemin est censé correspondre et les rails devraient ne pas générer la vue si la route n'a pas été assorties ...

Donc, ma question est simple: Pourquoi cette route ne correspond pas?

Espérons que quelqu'un verra quelque chose d'évident (et probablement stupide) sinon je aurai besoin xanax: D

Merci pour votre aide: p

PS: routes.rb file available here

Répondre

0

Ok lorsque vous utilisez un action de mise à jour (objet donné à form_for non vide). La méthode doit être PUT au lieu de POST.

La partie étrange est: pourquoi Rails n'affiche pas ce message?

Started PUT "/admin/module_instances/2/activity_instances/2/lists/1/update_attendance" 

au lieu de celui-ci

Started POST "/admin/module_instances/2/activity_instances/2/lists/1/update_attendance" 

A la fin la solution est simple dans le fichier d'itinéraire:

Remplacer que:

post :update_attendance 

par que:

put :update_attendance