我遇到了一个在控制台中似乎正确的路由,但是当我在服务器中使用它时给我一个路由错误。这种情况类似于“编辑”和“更新”对。调用 GET 'messages/25/followup' 应该路由到 messages#followup,而与 POST 相同的 URL 应该路由到 messages#followup_send。在我的 routes.rb 文件中,我有
get "messages/:id/followup", :to => "messages#followup"
match "messages/:id/followup", :to => "messages#followup_send", :via => :post
显示路线给出
ruby-1.9.2-p0 :092 > puts fu
GET /messages/:id/followup(.:format) {:controller=>"messages", :action=>"followup"}
POST /messages/:id/followup(.:format) {:controller=>"messages", :action=>"followup_send"}
在控制台中测试给出
ruby-1.9.2-p0 :088 > r.recognize_path "/messages/54/followup", :method=>'POST'
=> {:controller=>"messages", :action=>"followup_send", :id=>"54"}
表格中的代码是
<form id="edit_message_42" class="edit_message" method="post" action="/messages/42/followup?method=post" accept-charset="UTF-8">
...
<input type="submit" value="Send" name="commit">
但是,如果我单击按钮,我会进入日志
Started POST "/messages/42/followup?method=post" for 127.0.0.1 at 2012-06-27 13:54:48 +0100
ActionController::RoutingError (No route matches "/messages/42/followup")
如果我手动输入 URL(包括“method=post”),也会发生同样的事情。我现在将通过使用单独的名称(例如 /messages/42/send_followup)而不是依赖 GET-POST 来解决这个问题区别,但我想了解这里发生了什么。
感谢您的任何想法。