Rails Routing
routing system does 2 things
1) recognises and inteprets URLs
2) generating URLs and path strings in your views
recognition
- goals to determine controller and action
store other values in params hash
generation
- arguments to link_to, form_for, etc
- for redirection in controllers
anywhere you need a path or URL in your actual code
top-level route
map.root :controller => "cards"
link_to "top", root_path
map.connect ':controller/:action/:id'
shows what you want your URL to look like
routing system only makes sense to itself -> only the routing system can know what the URL means if it generated it.
routing system doesn't know how to resolve for another application
model doesn't know the controller which is manipulating it.
to inject css into a link_to
<%= link_to "log in", {:controller => 'this', :action => 'that'}, :class => "blah" %>
hard coding
map.connect 'help',
:controller => "leagues",
;action => "assist"
this will resolve http://www.web.site.com/help to the specific path leagues/assist
and will only resolve /help as that
map.connect 'help/:controller', :action => "assist"
resolves controller in http://www.web.site.com/help/wibble to the path wibble/assist
extra wildcards can also be added and matched positionally, which are then stored in params
:id is special case though, which allows it to be nil, whereas anything else needs to specified,
or will find no route (unless you use globbing)
you can constrain the wildcards with pattern matching, etc and have many of these, but orderis important
(higher up the routes.rb file, will hit first)
You may need to catch a routing error.
current and default values
missing components get defaults
:controller and :action from current ones
:id, :topic, etc from params hash
default gets turned off after the first one you specify
named routes:
map.<name> "name",
:controller => :x,
:action => :y
then allows
redirect_to name_url
link_to "text" name_path
map.vampires 'vampire/:name/:capacity',
:controller => :cards,
:action => :vampires
<%= link_to "#{vampire} with capacity #{capacity}",
vampires_path :name => vampire, :capacity => capacity %>
<%= link_to "#{vampire} with capacity #{capacity}",
vampires_path (vampire, capacity) %>
(walks through the list into the url space)
Named routes and CRUD
these can be expressive and encourage good action names
cluster thinking around the operation (borrow book is create loan, renew is update, return is destroy/delete, view all loans is read)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment