Rutes a la consola

enviat per Ramon Salvadó el dilluns 19 de Novembre del 2007 a les 12:10 hores

Per a depurar les rutes mitjançant la consola de Rails:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ script/console
Loading development environment.
# Carreguem la definició de les rutes
>> rs = ActionController::Routing::Routes
=> #<actioncontroller::routing::routeset:0x61d76c>> puts rs.routes
ANY    /feed/suggest/                           {:action=>"suggest", :controller=>"public"}
ANY    /feed/thanks/                            {:action=>"thanks", :controller=>"public"}
ANY    /:page/                                  {:action=>"index", :controller=>"public"}
ANY    /:controller/:action/:id.:format/        {}
ANY    /:controller/:action/:id/                {}
=> nil
# Reconeixement de rutes
>> rs.recognize_path "/feed"
=> {:action=>"index", :page=>"feed", :controller=>"public"}
>> rs.recognize_path "/feed/thanks"
=> {:action=>"thanks", :controller=>"public"}
>> rs.generate :controller => :public, :page => 2
=> "/2"
# Per a testejar rutes de controladors inexistents
>> ActionController::Routing.use_controllers! [ "undefined", "test" ]
=> ["undefined", "test"]
>> load "config/routes.rb"
=> []
>> rs.recognize_path "/undefined/show/1"
=> {:action=>"show", :id=>"1", :controller=>"undefined"}

Rails named routes

enviat per Ramon Salvadó el dijous 25 de Gener del 2007 a les 09:43 hores

Coincidint amb la recent sortida de la versió 1.2 de rails, vam estar discutint amb els companys els avantatges i inconvenients de les named routes respecte a les alternatives ja existents:

1
2
# Named route example
map.blog_post 'bloc/:user/post/:post', :controller=>'blog', :action=>"post"
1
2
# Default implicit route
map.connect ':controller/:action/:id'

Els inconvenients mencionats de les named routes en la discussió van ser:

  • Requereixen de ser més explicits i per tant hi ha més feina de definició.
  • En general emprar el sistema de routes de rails té un impacte considerable en rendiment.

La veritat es que ambdués consideracions són certes, però l’avantatge principal que aporten les named routes és el “decoupling” de les routes dels controladors i les accions, això fa que sigui molt més senzill de canviar tant les propies routes com el mapeig amb els controladors i accions a que fan referencia sense haver de modificar el nostre codi. Per exemple a l’hora de generar un enllaç podem fer:


<%=link_to comments_text,  blog_post_url(:user=>post.author.alias, :post=>post.urlname, :anchor=>"comments ") %>

Pel que fa als inconvenients mencionats:

  • Hi ha un post molt interessant d’en Jamis Buck al respecte, bàsicament podem estalviar-nos una mica de feina amb la opció with_options.
  • Pel que fa al rendiment, com sempre és millor deixar les optimitzacions pel final i aplicar-les a on i quan ens facin realment falta. La solució passaria per no utilitzar els mètodes link_to i similars en les vistes i utilitzar les url a pèl.