There are multiple ways to redirect URLs to a different URL in Rails, and they differ in small but important nuances.
Imagine you want to redirect the following url
You can use
ActionController::Redirecting#redirect_to in a controller action
class SomeController < ActionController::Base def old_location redirect_to(new_location_url(params.permit(:foo))) end end
ActionController::UnfilteredParametersif there is any other query param than
https://www.example.com/old_location?another_param=1. This is because
ActionController::Parameters, which will raise if there are unpermitted parameters.
You can also use
ActionDispatch::Routing::Redirection#redirect in the
get 'old_location', redirect(path: '/new_location')
https://example.com/old_location?b=bwill redirect to
You can achieve the same forwarding of query parameters with variant A as explained here, but please be aware of its security implications.
Both variants have options to change their default behaviour.
If you have a public facing website that ranks on search engines, choosing the correct redirect code is important. If you decide to change your url structure and want the search engines to index the new target url (
/new_location?foo=bar) then you should use a 301. You can more about how google handles this .