ruby-on-rails-3 – 简单的Rails 3路由失败 – 没有路由匹配

在我的config / routes.rb中,我有:

  post "portal_plan_document/update"

rake路线证实了这一点:

$rake routes
portal_plan_document_update POST /portal_plan_document/update(.:format) {:controller=>"portal_plan_document", :action=>"update"}
....

在我的代码中,我有:

<%= form_for @plan_doc, 
    :url => portal_plan_document_update_path, 
    :method => "POST", :remote => true do |f| %>

在我的日志文件中,我看到:

Started POST "/portal_plan_document/update" for 127.0.0.1 at 2011-03-31 18:04:37 -0400

ActionController::RoutingError (No route matches "/portal_plan_document/update"):

我迷失了,因为从这里做了什么.任何帮助将不胜感激!

我应该声明我使用的是Ruby 1.9.2和Rails 3.0.5.哦,我在更新routes.rb后重新启动了服务器(WebBrick w / rails服务器).

杰里米

最佳答案
弄清楚了! 🙂
如果您有非空对象,则rails假定您要更新该对象.即,使用’PUT’而不是’POST’

要完成’PUT’,rails会在表单中放入一个隐藏的输入,“_method”=“put”.所以,它看起来像是一个POST,但rails将它视为PUT.

如果你真的想要更新一个对象(它看起来像你正在做什么),PUT会更好,你应该只将路由切换到PUT.

if(就像我一样),你正在做一些真正需要POST的东西(即,它不能安全地发送多次),你可以像这样编写form_for:

<%= form_for @plan_doc, 
:url => portal_plan_document_update_path, 
:html=>{:method => "POST"}, :remote => true do |f| %>

确认,查看生成的HTML源代码,并确保隐藏的“_method”字段未设置为“put”

转载注明原文:ruby-on-rails-3 – 简单的Rails 3路由失败 – 没有路由匹配 - 代码日志