gpt4 book ai didi

ruby-on-rails - 使用 DELETE 而不是 GET 删除后 Rails 重定向

转载 作者:行者123 更新时间:2023-12-03 13:29:33 25 4
gpt4 key购买 nike

我有一条路线,我正在发出 DELETE在:

user_authorization_path(@user, authorization)

它击中了我的 Controller , Controller 删除了资源,然后发出重定向:
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在重定向调用上,而不是使用 DELETE这会导致 404(因为该资源不支持 DELETE - 无论如何这都是错误的)。

如果我只是在重定向的 URL 上执行“GET”,它就可以正常工作。

删除后我对 Rails 的重定向缺少什么?谢谢。

最佳答案

这应该以更好的方式修复它:
redirect_to edit_user_path(params[:user_id]), status: 303
http://api.rubyonrails.org/classes/ActionController/Redirecting.html

If you are using XHR requests other than GET or POST and redirecting after the request then some browsers will follow the redirect using the original request method. This may lead to undesirable behavior such as a double DELETE. To work around this you can return a 303 See Other status code which will be followed using a GET request.

关于ruby-on-rails - 使用 DELETE 而不是 GET 删除后 Rails 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14598703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com