0
Routing
2 purposes of Routing
2 purposes of Routing
1) maps Requests to Controller Action methods
2) generation of URLs
●

To be u...
1.) Mapping HTTP Requests to
Controller-Actions
Lifecycle of a HTTP Request
routes.rb
●

config/routes.rb
●

specify 'Routing Rules' a.k.a 'Routes' here

●

Order is important
Rules are applied in t...
routes.rb (contd.)
NOTE
●

Whatever URLs have to work, have to be
EXPLICITLY specified in routes.rb
–

Unless the .html fi...
routes.rb (contd.)
●

A website may have many, many, URLs that
need to work…
so,
how to specify all of them in routes.rb ?...
Legacy way that does Not work
●

Legacy way of supplying controller and action
parameters prior to Rails 3 does not work
a...
Regular Syntax
●

Regular syntax
●

●

use :to

match [URL Pattern],

:to => Controller#Action

E.g.
match 'products/:id',...
ShortCut – drop “:to”
●

Full Syntax
match 'products/:id' , :to => 'products#show'

●

Shortcut
match 'products/:id' => 'p...
Another Shortcut Syntax –
when path already has controller &
action names
●

Full Syntax
match “/projects/status”, :to => ...
Constraining Request Methods
and Shortcut
●

To limit the HTTP method :via parameter
match 'products/show', :to => 'produc...
Segment Keys
●

match 'recipes/:ingredient' => “recipes#index”

“:ingredient” – segment key
http://example.com/recipes/bir...
Passing additional parameters via
segment keys
●

Possible to insert additional hardcoded parameters
into route definition...
Optional Segment Keys
●

Parentheses are used to define optional
segment keys
match ':controller(/:action(/:id(.:format)))
Segment Key Constraints
match 'products/:id' => 'products#show', :constraints => {:id

=> /d+/}

Shortcut:
match 'products...
Segment Key Constraints
- More Powerful constraints checking
●

For more powerful constraints checking
–

We can pass a 'b...
Redirect Routes
●

Possible to redirect using the redirect method
match “/google”, :to => redirect(“http://google.com/”)
Route Globbing
●

To grab more than 1 component
●

●

Use *

E.g.
/items/list/base/books/fiction/dickens
match 'items/list...
2.) Generating URLs
Generating URLs
●

Original way (and simplest to understand) to
generate a URL ●

we have to supply values for the segment...
Generating URLs (contd.)
●

More common way nowadays
●

using Named Routes
Named Routes
●

Created using :as parameter in a rule

●

Example:
match “item/:id” => “items#show”, :as => “item”
Named Routes – Behind the scenes
●

What actually happens when we name a route ?
2 New methods get defined
–

<name>_url ,...
Example
●

Scenario:
Suppose we have a Auction Site , and have Items
data
Goal - To display details of a particular Item

...
Example contd.
●

In the View (i.e .html.erb file) link_to “Auction of #{item.name}”,
:controller => “items”,
:action => “...
Example contd.
Let us make the following change in routes.rb
●

Original Route match “item/:id” => “items#show”

●

Append...
Example contd.
View code will change as follows:
●

Original “link_to” statement
link_to “Auction of #{item.name}”,
:contr...
Shortcuts when using Named Routes
●

The Named route we created can further be
shortened :
FROM

link_to “Auction of #{ite...
More complicated Named Routes
●

Many Auctions and each Auction has Many
Items URL of Item details page /auction/5/item/1
...
More complicated Named Routes
(contd.)
●

Let us create a named route
by using :as
match “auction/:auction_id/item/:id” =>...
●

“link_to” statement changes
FROM:
link_to “Auction of #{item.name}”,
:controller => “items”,
:action => “show”,
:auctio...
RESTful “resources” & Named Routes
●

resources :auctions
Above line in routes.rb creates 7 Routes out of
which 4 are Name...
RESTful “resources” & Named Routes
(contd.)
●

resources :auctions
resources :items
end
Scoping Routing Rules
“public” folder and Routing
Root route & “public” folder
●

In a newly generated Rails application
–

In routes.rb ●

–

root route is commented out

...
Root Route (contd.)
“public” folder
●

http://localhost:3000
=
http://localhost:3000/index.html

●

“public” folder in the...
“public” folder
●

Files in this folder will be scanned before
looking at of routing rules
●

Static content is usually pu...
Upcoming SlideShare
Loading in...5
×

Rails training presentation routing

160

Published on

Published in: Business, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
160
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Rails training presentation routing"

  1. 1. Routing
  2. 2. 2 purposes of Routing 2 purposes of Routing 1) maps Requests to Controller Action methods 2) generation of URLs ● To be used as arguments to methods like link_to, redirect_to
  3. 3. 1.) Mapping HTTP Requests to Controller-Actions
  4. 4. Lifecycle of a HTTP Request
  5. 5. routes.rb ● config/routes.rb ● specify 'Routing Rules' a.k.a 'Routes' here ● Order is important Rules are applied in the order in which they appear ● To list all routes: rake routes ● To filter routes :
  6. 6. routes.rb (contd.) NOTE ● Whatever URLs have to work, have to be EXPLICITLY specified in routes.rb – Unless the .html file exists in “public” folder i.e. Even if we create Controller, ControllerAction, View → if there is no route for the URL in routes.rb, then that URL will NOT work
  7. 7. routes.rb (contd.) ● A website may have many, many, URLs that need to work… so, how to specify all of them in routes.rb ? ● In routes.rb, when we create 'routing rules', we can specify patterns for permitted URLs (Next few slides talk about the Syntax used for specifying those 'routing rules')
  8. 8. Legacy way that does Not work ● Legacy way of supplying controller and action parameters prior to Rails 3 does not work anymore # DOES NOT WORK match 'products/:id', :controller => “product”, :action => “show”
  9. 9. Regular Syntax ● Regular syntax ● ● use :to match [URL Pattern], :to => Controller#Action E.g. match 'products/:id', :to => 'products#show'
  10. 10. ShortCut – drop “:to” ● Full Syntax match 'products/:id' , :to => 'products#show' ● Shortcut match 'products/:id' => 'products#show' We can drop - , :to
  11. 11. Another Shortcut Syntax – when path already has controller & action names ● Full Syntax match “/projects/status”, :to => “projects#status” ● Shortcut match “/projects/status” ● “projects” controller ● “status” action
  12. 12. Constraining Request Methods and Shortcut ● To limit the HTTP method :via parameter match 'products/show', :to => 'products#show', :via ● Shortcut: get “/products/show” => :get
  13. 13. Segment Keys ● match 'recipes/:ingredient' => “recipes#index” “:ingredient” – segment key http://example.com/recipes/biryani In Controller code: we can get “biryani” from params[:ingredient]
  14. 14. Passing additional parameters via segment keys ● Possible to insert additional hardcoded parameters into route definitions match 'products/special' => 'products#show', true ● Accessed in Controller code via ● params[:special] :special =>
  15. 15. Optional Segment Keys ● Parentheses are used to define optional segment keys match ':controller(/:action(/:id(.:format)))
  16. 16. Segment Key Constraints match 'products/:id' => 'products#show', :constraints => {:id => /d+/} Shortcut: match 'products/:id' => 'products#show', :id => /d+/
  17. 17. Segment Key Constraints - More Powerful constraints checking ● For more powerful constraints checking – We can pass a 'block' to “:constraints”
  18. 18. Redirect Routes ● Possible to redirect using the redirect method match “/google”, :to => redirect(“http://google.com/”)
  19. 19. Route Globbing ● To grab more than 1 component ● ● Use * E.g. /items/list/base/books/fiction/dickens match 'items/list/*specs' => 'items#list' ● In Controller code - params[:specs]
  20. 20. 2.) Generating URLs
  21. 21. Generating URLs ● Original way (and simplest to understand) to generate a URL ● we have to supply values for the segment keys using a Hash Example : link_to “Products”, :controller => “products”, :action => “show”, :id => @product.id
  22. 22. Generating URLs (contd.) ● More common way nowadays ● using Named Routes
  23. 23. Named Routes ● Created using :as parameter in a rule ● Example: match “item/:id” => “items#show”, :as => “item”
  24. 24. Named Routes – Behind the scenes ● What actually happens when we name a route ? 2 New methods get defined – <name>_url , <name>_path Example : match “item/:id” => “items#show”, :as => “item ” → above line creates 2 new methods ● ● item_path, item_url These methods are used with link_to ● to Generate Urls
  25. 25. Example ● Scenario: Suppose we have a Auction Site , and have Items data Goal - To display details of a particular Item ● Starting Point In routes.rb, we will already have match “item/:id” => “items#show”
  26. 26. Example contd. ● In the View (i.e .html.erb file) link_to “Auction of #{item.name}”, :controller => “items”, :action => “show”, :id => item.id How can the above code be improved by using Named Routes ?
  27. 27. Example contd. Let us make the following change in routes.rb ● Original Route match “item/:id” => “items#show” ● Append :as parameter to create Named Route match “item/:id” => “items#show”, :as => “item”
  28. 28. Example contd. View code will change as follows: ● Original “link_to” statement link_to “Auction of #{item.name}”, :controller => “items”, :action => “show”, :id => @item.id ● Using named route link_to “Auction of #{item.name}”, item_path (:id => @item.id)
  29. 29. Shortcuts when using Named Routes ● The Named route we created can further be shortened : FROM link_to “Auction of #{item.name}”, item_path (:id => @item.id) TO Rails - “id” is default parameter, so we can drop “id” wherever possible link_to “Auction of #{item.name}”, item_path (@item.id) link_to “Auction of #{item.name}”, item_path (@item)
  30. 30. More complicated Named Routes ● Many Auctions and each Auction has Many Items URL of Item details page /auction/5/item/1 ● Starting Point We will probably already have match “auction/:auction_id/item/:id” => “items#show”
  31. 31. More complicated Named Routes (contd.) ● Let us create a named route by using :as match “auction/:auction_id/item/:id” => “items#show” , :as => “item”
  32. 32. ● “link_to” statement changes FROM: link_to “Auction of #{item.name}”, :controller => “items”, :action => “show”, :auction_id => @auction.id, :id => @item.id TO link_to “Auction of #{item.name}”,
  33. 33. RESTful “resources” & Named Routes ● resources :auctions Above line in routes.rb creates 7 Routes out of which 4 are Named Routes
  34. 34. RESTful “resources” & Named Routes (contd.) ● resources :auctions resources :items end
  35. 35. Scoping Routing Rules
  36. 36. “public” folder and Routing
  37. 37. Root route & “public” folder ● In a newly generated Rails application – In routes.rb ● – root route is commented out How is a page shown for the root URL ? http://localhost:3000/
  38. 38. Root Route (contd.) “public” folder ● http://localhost:3000 = http://localhost:3000/index.html ● “public” folder in the root of our application <=> root-level URL ● That folder contains a “index.html”
  39. 39. “public” folder ● Files in this folder will be scanned before looking at of routing rules ● Static content is usually put here ● Cached content will be placed here
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×