J’ai déjà parlé des routes, notamment du fichier routes.rb qui les définit. Par défaut, les url sont du type :

map.connect ':controller/:action/:id'

Si je prends cet exemple : http://localhost:3000/posts/edit/2, l’url est plutôt explicite. J’édite le post dont l’id est le numéro 2. J’en avais déjà parlé d’ailleurs. C’est ce schéma qu’il faut retenir :
http://localhost:3000/posts/edit/2
Application/Controller/Action/Id

Les Actions correspondent aux méthodes de mon Controller. Par défaut, c’est l’Action index qui est exécutée, c’est à dire pour http://localhost:3000/posts.

Voir toutes les routes disponibles

Dans mon fichier routes.rb j’ai 4 lignes :

  map.resources :posts, :has_many => :comments
  map.root :controller => "home"
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

Il y a les routes pour les posts, pour les commentaires (qui est imbriqué dans celui des posts donc ça donne http://localhost:3000/posts/1/comments par exemple), puis j’ai le format par défaut des routes.

Pour voir toutes les routes disponibles, je fais rake routes. Ca génère un gros output :

            posts GET    /posts(.:format)                            {:controller=>"posts", :action=>"index"}
                  POST   /posts(.:format)                            {:controller=>"posts", :action=>"create"}
         new_post GET    /posts/new(.:format)                        {:controller=>"posts", :action=>"new"}
        edit_post GET    /posts/:id/edit(.:format)                   {:controller=>"posts", :action=>"edit"}
             post GET    /posts/:id(.:format)                        {:controller=>"posts", :action=>"show"}
                  PUT    /posts/:id(.:format)                        {:controller=>"posts", :action=>"update"}
                  DELETE /posts/:id(.:format)                        {:controller=>"posts", :action=>"destroy"}
    post_comments GET    /posts/:post_id/comments(.:format)          {:controller=>"comments", :action=>"index"}
                  POST   /posts/:post_id/comments(.:format)          {:controller=>"comments", :action=>"create"}
 new_post_comment GET    /posts/:post_id/comments/new(.:format)      {:controller=>"comments", :action=>"new"}
edit_post_comment GET    /posts/:post_id/comments/:id/edit(.:format) {:controller=>"comments", :action=>"edit"}
     post_comment GET    /posts/:post_id/comments/:id(.:format)      {:controller=>"comments", :action=>"show"}
                  PUT    /posts/:post_id/comments/:id(.:format)      {:controller=>"comments", :action=>"update"}
                  DELETE /posts/:post_id/comments/:id(.:format)      {:controller=>"comments", :action=>"destroy"}
             root        /                                           {:controller=>"home", :action=>"index"}
                         /:controller/:action/:id
                         /:controller/:action/:id(.:format)

J’ai fait une image aussi parce que c’est pas très lisible :
routes-en-rails

Il y a plusieurs colonnes :

  • le nom de la route
  • le type de requête HTTP (GET,POST,DELETE…)
  • l’url
  • le Controller utilisé
  • l’Action exécutée

On voit ici les routes des posts, des comments, et la route “root”, c’est à dire la page d’accueil.