[英]Rails Redirect After Delete Using DELETE Instead of GET
我有一個路由我發布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
,而是使用DELETE
導致404(因為該資源不支持DELETE
- 這無論如何都是錯誤的)。
如果我只是在重定向的URL上執行'GET',它就可以正常工作。
關於Rails刪除后的重定向我錯過了什么? 謝謝。
這應該以更好的方式解決它:
redirect_to edit_user_path(params[:user_id]), status: 303
http://api.rubyonrails.org/classes/ActionController/Redirecting.html
如果您使用GET或POST以外的XHR請求並在請求后重定向,則某些瀏覽器將使用原始請求方法跟蹤重定向。 這可能會導致不良行為,例如雙重DELETE。 要解決此問題,您可以返回303參見其他狀態代碼,使用GET請求將遵循該狀態代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.