Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

:as in rails routes.rb

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?

like image 410
ryanprayogo Avatar asked Jan 14 '11 21:01

ryanprayogo


People also ask

What is routes rb in Rails?

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.

How many types of routes are there in Rails?

Rails RESTful Design which creates seven routes all mapping to the user controller. Rails also allows you to define multiple resources in one line.

Why we use as in routes 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.

What are Rails resource routes?

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.


2 Answers

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.

like image 154
Andy Lindeman Avatar answered Sep 21 '22 16:09

Andy Lindeman


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

like image 43
Roman Bambycha Avatar answered Sep 24 '22 16:09

Roman Bambycha