Possible to create this redirecting route in Rails?
Solution 1
Assuming rails version prior to 3.
You can create a new RedirectController
or tuck a single function away in an existing controller, to do something like the following:
map.js_embed '/j/e',
:controller => :redirect_controller,
:action => :some_function,
:path => "embed"
Then your function would do this:
def some_function
if params[:path]
redirect_to "/javascripts/#{params[:path]}.js"
end
end
or something for that effect.
Solution 2
In Rails 4 and above
get '/stories', to: redirect('/posts')
In case you need a named route, you may want to add an explicit as
parameter:
get '/stories', to: redirect('/posts'), as: :however_you_want_to_name_it
Source: Redirection @ guides.rubyonrails.org
In Rails 3, you can redirect inside the routes.rb file.
match "/posts/github" => redirect("http://github.com/rails.atom")
Shpigford
Maker. Dabbler. Founder of Baremetrics. I can't stop starting things. Cedar & Sail, Laser Tweets, Founder Chats, Droptune, Rockburg. Bearded.
Updated on July 24, 2020Comments
-
Shpigford almost 4 years
Is it possible to do a redirect in the routes file of a Rails app?
Specifically, I'd like to forward
/j/e
to/javascripts/embed.js
Right now the only way I can think to do it is to create a
j
controller with ane
method that redirects to that. -
user664833 almost 12 years
-
Doug English over 11 yearsThanks! I also needed to include an id in my redirect. For those that need it /:id/ in the match can be referenced as /%{id}/ in the redirected url...
-
Dennis over 10 yearsIn Rails 4,
get '/stories', to: redirect('/posts')
, as seen in the RoR Guides. Note that you don't need to create a view since you're redirecting at the routes level. -
Augustin Riedinger over 8 yearsIn rails 4.2, using
to:
inroutes.rb
is deprecated. -
Nuri Hodges over 8 years@AugustinRiedinger the RoR guide for 4.2.6 says otherwise: guides.rubyonrails.org/routing.html#redirection