:as in rails routes.rb
Ruby on-RailsRubyRuby on-Rails-3RoutingRuby 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.
path_to_your_app/config/routes.rb
In 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"
path_to_your_app/app/views/**in
required view
In <%= link_to "Edit profile", edit_me_path %>
match
if you aren't sure you need it:
Do not use 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.