Possible to create this redirecting route in Rails?

45,725

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")
Share:
45,725
Shpigford
Author by

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, 2020

Comments

  • Shpigford
    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 an e method that redirects to that.

  • user664833
    user664833 almost 12 years
  • Doug English
    Doug English over 11 years
    Thanks! 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
    Dennis over 10 years
    In 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
    Augustin Riedinger over 8 years
    In rails 4.2, using to: in routes.rb is deprecated.
  • Nuri Hodges
    Nuri Hodges over 8 years
    @AugustinRiedinger the RoR guide for 4.2.6 says otherwise: guides.rubyonrails.org/routing.html#redirection