Read more

Rails: Default HTTP status codes when redirecting

Henning Koch
May 12, 2022Software engineer at makandra GmbH

When redirecting you should take care to use the right HTTP status code.

From controllers

Illustration book lover

Growing Rails Applications in Practice

Check out our e-book. Learn to structure large Ruby on Rails codebases with the tools you already know and love.

  • Introduce design conventions for controllers and user-facing models
  • Create a system for growth
  • Build applications to last
Read more

When redirecting from a controller Archive , the default status code is 302 Found (aka Moved Temporarily):

redirect_to posts_url # HTTP 302 Moved Temporarily

To use a different code, pass a :status option:

redirect_to posts_url, status: 301

From routes

When redirecting from your config/routes.rb Archive , the default status code is 301 Moved Permanently:

get '/stories', to: redirect('/articles') # HTTP 301 Moved Permanently

To use a different code, pass a :status option:

get '/stories', to: redirect('/articles', status: 302)


By default Archive Rails sends a header Cache-Control: max-age=0, private, must-revalidate with all responses, including redirects. That means if you accidentally use a permenent redirect, it is not cached in browsers.

Posted by Henning Koch to makandra dev (2022-05-12 09:34)