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?
It's a way to redirect incoming requests to controllers and actions. It replaces the mod_rewrite rules. Best of all, Rails' Routing works with any web server. Routes are defined in app/config/routes. rb.
Rails RESTful Design which creates seven routes all mapping to the user controller. Rails also allows you to define multiple resources in one line.
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.
Resource routing allows you to quickly declare all of the common routes for a given resourceful controller. A single call to resources can declare all of the necessary routes for your index , show , new , edit , create , update , and destroy actions.
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.
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"
path_to_your_app/app/views/**in
required view<%= link_to "Edit profile", edit_me_path %>
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"
http://github.com/rails/rails/issues/5964
http://apidock.com/rails/v4.0.2/ActionDispatch/Routing/Mapper/Base/match
http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Base.html
http://api.rubyonrails.org/classes/ActionDispatch/Routing.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With