Rails 3与成员路由错误

我在rails 3中有以下路线:

resources :jobs do member do post :seller_job_submitted end end 

以下表格

 =form_for job, :url=>seller_job_submitted_job_path(job), :remote=>true do |f| 

我知道这不是很安静,但现在这是一个停顿差距。 在任何情况下,我在提交表单时都会收到此错误

 Started POST "/jobs/74/seller_job_submitted" for 127.0.0.1 ActionController::RoutingError (No route matches "/jobs/74/seller_job_submitted"): 

但是当我运行rake routes | grep seller_job_submitted rake routes | grep seller_job_submitted ,我认为正确的结果出现了:

 seller_job_submitted_job POST /jobs/:id/seller_job_submitted(.:format) {:action=>"seller_job_submitted", :controller=>"jobs"} 

关于可能发生的事情的任何想法?

谢谢!

假设您已在模型和控制器中定义了seller_job_submitted方法。 替换你的代码

 resources :jobs match "jobs/:id/seller_job_submitted" => "jobs#seller_job_submitted", :as => "seller_job_submitted" 

然后在form_for标签中使用:url=>seller_job_submitted_path

这应该可以解决您的问题:您没有明确定义seller_job_submitted_job_path。

也许用put而不是post ? 或者使用:post作为提交表单中的方法。

您可以通过查看生成表单的REST方法来判断这是否是问题(在页面源中查找隐藏字段)。

简而言之,也许Rails在某种程度上期望在该URL上发布POST ,但它正在接收PUT

是的,这是Rails 3的回归错误。事实certificate你需要注意在routes.rb中使用POST。

 resources :jobs do member do post :seller_job_submitted # will not work put :seller_job_submitted # will just work end 

即使FORM方法说POST也是如此。