Ruby on Rails 3,无法解释的“路线不匹配”

时间:2010-11-11 11:03:05

标签: ruby-on-rails ruby-on-rails-3 routing routes

我遇到了一个我无法解释的问题:/

我为特定操作创建了一条路线。 它显示为rake routes结果:

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"}

此动作假设处理表单提交:

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

顺便说一句:我也试过使用帮助器update_attendance_admin_module_instance_activity_instance_list_path,但它非常罗嗦,也不起作用。

然后提交表格时:

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"):

如果路由不匹配,则通过路径助手成功生成的URL应该匹配,并且rails应该失败生成视图...

所以,我的问题很简单:为什么这条路线不匹配?

希望有些人会看到明显的东西(可能是愚蠢的),否则我会需要一些xanax:D

感谢您的帮助:p

PS:routes.rb file available here

1 个答案:

答案 0 :(得分:0)

使用更新操作时确定(对象赋予form_for非空)。该方法必须是PUT而不是POST。

奇怪的部分是:为什么Rails没有显示此消息?

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

而不是这个

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

最后,路径文件中的解决方案很简单:

替换:

post :update_attendance

由此:

put :update_attendance