Ensure Correct Redirect Action with 303 Status
Let's say I have a Post
model, and send a PATCH
XHR request for an instance of Post
, handled by the PostsController
. Normally, if I want to redirect to the posts_path
at the end of the controller action I end the method like so:
def patch
# patch-y things done here
redirect_to posts_path
end # => redirects to PATCH /posts ❌
It's possible, depending on your browser, that instead of redirecting as a GET
request to posts_path
like you would expect, the original PATCH
method is forwarded instead. Most times, this probably isn't what you want. To force the redirect to use the appropriate method for the path you're redirecting to, you can use the 303 See Other
status code:
def patch
# patch-y things done here
redirect_to posts_path, status: :see_other
end # => redirects to GET /posts ✅
It's specifically called out in the docs (ActionController::Redirecting) so it seems to be fairly well-known/widespread, but it was a new to me occurrence.
Tweet