【发布时间】:2013-01-13 22:56:33
【问题描述】:
我有一条路线,我正在发出DELETE:
user_authorization_path(@user, authorization)
它很好地命中了我的控制器,控制器删除了资源,然后发出了重定向:
redirect_to edit_user_path(params[:user_id])
这样做的结果是重定向时出现路由错误:
ActionController::RoutingError (No route matches [DELETE] "/users/1/edit")
我可以在日志中看到 rails 在重定向之前一直在做正确的事情,它试图发出另一个 DELETE 而不是 GET:
Started DELETE "/users/1/authorizations/12"...
...
Redirected to http://localhost:3000/users/1/edit
Completed 302 Found in 8ms (ActiveRecord: 0.2ms)
Started DELETE "/users/1/edit"...
ActionController::RoutingError (No route matches [DELETE] "/users/1/edit")
Chrome 调试器显示初始请求:
Request URL:http://localhost:3000/users/1/authorizations/12
Request Method:DELETE
Status Code:302 Found
以及它的以下重定向:
Request URL:http://localhost:3000/users/1/edit
Request Method:GET
Status Code:404 Not Found
所以这似乎是浏览器正确地遵循了重定向,但是 rails 忽略了重定向调用中的GET,而是使用了导致 404 的DELETE(因为该资源不支持DELETE - 无论如何这是错误的)。
如果我只是对重定向的 URL 执行“GET”,它就可以正常工作。
删除后 Rails 的重定向缺少什么?谢谢。
【问题讨论】:
标签: ruby-on-rails redirect routes http-delete