1. The 14th Round of ROR Lab.
Rails Routing
from the Outside In
(2)
June 9th, 2012
Hyoseong Choi
ROR Lab.
2. Non-Resourceful
default Rails route :
match ':controller(/:action(/:id))'
symbols bound to parameters
special symbols:
:controller and :action
ROR Lab.
3. Dynamic Segments
match ':controller/:action/:id/:user_id'
params[:id]
params[:user_id]
When you need namespacing controllers,
match ':controller(/:action(/:id))', :controller => /admin/[^/]+/
ROR Lab.
8. HTTP Verb
match 'photos/show' => 'photos#show', :via => :get
get 'photos/show'
match 'photos/show' => 'photos#show',
:via => [:get, :post]
ROR Lab.
9. Segment
Constraints
match 'photos/:id' => 'photos#show',
match 'photos/:id' => 'photos#show',
X match '/:id' => 'posts#show',
match '/:id' => 'posts#show',
:constraints => { :id => /d.+/ }
match '/:username' => 'users#show'
ROR Lab.
10. Request-based
any method on the Request object that returns aString.
match "photos",
:constraints => {:subdomain => "admin"}
namespace :admin do
constraints :subdomain => "admin" do
resources :photos
end
http://api.rubyonrails.org/classes/ActionDispatch/Http/URL.html
ROR Lab.
12. Advanced
Constraints
class BlacklistConstraint
def initialize
@ips = Blacklist.retrieve_ips
end
def matches?(request)
@ips.include?(request.remote_ip)
end
end
TwitterClone::Application.routes.draw do
match "*path" => "blacklist#index",
:constraints => BlacklistConstraint.new
ROR Lab.
14. Route Globbing
: anywhere in a route
match 'books/*section/:title' => 'books#show'
• books/some/section/last-words-a-memoir
• params[:section] = “some/section”
• params[:title] = “last-words-a-memoir”
ROR Lab.
15. Route Globbing
: even more than one wildcard segments
match '*a/foo/*b' => 'test#index'
• zoo/woo/foo/bar/baz
• params[:a] = “zoo/woo”
• params[:b] = “bar/baz”
ROR Lab.
16. Route Globbing
: always match the optional format segment
by defaults from Rails 3.1
3.1~ match '*pages' => 'pages#show'
3.0.x match '*pages' => 'pages#show', :format => false
match '*pages' => 'pages#show', :format => true
• /foo/bar.json
• params[:pages] = “foo/bar”
• request format => JSON
ROR Lab.
17. Redirection
using a 301 ‘moved permanently’ redirect
match "/stories" => redirect("/posts")
match "/stories/:name" => redirect("/posts/%{name}")
match "/stories/:name" => redirect {|params| "/posts/
#{params[:name].pluralize}" }
match "/stories" => redirect {|p, req| "/posts/#{req.subdomain}" }
provide the leading host (http://www.example.com)
ROR Lab.
18. Routing to Rack
Applications
match "/application.js" => Sprockets
ROR Lab.
19. Using root
“/”
root :to => 'pages#main'
ROR Lab.