:as in rails routes.rb

Ruby on-RailsRubyRuby on-Rails-3Routing

Ruby on-Rails Problem Overview


In config/routes.rb, I tried both:

root :to => 'things#index', :as => 'things'

and

root :to => 'things#index'

When I hit http://localhost:3000/, both approaches work, and nothing seems to be different.

What is the :as option used for?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

The :as option forms a named route.

Usually it's used in a non-root route. For example:

match '/search' => 'search#search', :as => 'search' # SearchController#search

You could then do something like:

<%= link_to search_path, 'Click Here to Search!' %>

search_path and search_url are defined because of the :as

For a root route, you don't really need :as because the the URL helpers root_path and root_url are defined for you by Rails.

Solution 2 - Ruby on-Rails

Rails 4 compatible.

In path_to_your_app/config/routes.rb

get "/profile/edit" => "users#profile_edit", :as => "edit_me"

Since ruby 2.0 you can use:

get "/profile/edit", to: "users#profile_edit", as: "edit_me"

In path_to_your_app/app/views/**in required view

<%= link_to "Edit profile", edit_me_path %>

Do not use match if you aren't sure you need it:

It creates a vulnerability when you use it in next pattern:

match ':controller/:action/:id'

From documentation:

> You should not use the match method in your router without > specifying an HTTP method. If you want to expose your action to both > GET and POST, add via: [:get, :post] option. If you want to expose > your action to GET, use get in the router: > > Instead of: match "controller#action" > > Do: get "controller#action"

Read more about:

About match

http://github.com/rails/rails/issues/5964

About routes mapping

http://apidock.com/rails/v4.0.2/ActionDispatch/Routing/Mapper/Base/match

http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Base.html

About routes in general

http://api.rubyonrails.org/classes/ActionDispatch/Routing.html

Solution 3 - Ruby on-Rails

The :as option creates a named path. You can then call this path in your controllers and views (e.g. redirect_to things_path). This isn't very useful for the root path (as it already named root), but is very useful for new routes you add.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionryanprayogoView Question on Stackoverflow
Solution 1 - Ruby on-RailsAndy LindemanView Answer on Stackoverflow
Solution 2 - Ruby on-RailsRoman BambychaView Answer on Stackoverflow
Solution 3 - Ruby on-RailsDavid SulcView Answer on Stackoverflow