2010-01-21 6 views
2

Disons que vous avez un deux modèles avec les messages du blog et des commentaires mis en place comme ceci:Itinéraires nommés imbriqués dans des rails?

class post 
has_many :comments 

et le routage a été mis en place à peu près de la même façon:

map.resources :posts, :has_many => :comments 

Quand je vais faire un nouveau commentaire apparaît comme localhost :: 3000/postname/comments/new

Que faire pour que l'URL lise quelque chose comme: localhost :: 3000/postname/shoutout?

La raison pour laquelle je veux faire ceci est parce que cette page particulière aura plus que juste un nouveau formulaire de commentaire là-dessus.

Je n'ai aucun problème à nommer les routes, mais j'ai de la difficulté à trouver quoi faire avec une route imbriquée.

Répondre

2

Les routes n'ont rien à voir avec les formulaires qui sont sur la page, je ne sais pas quel est le problème?

Si vous voulez avoir /postname/shoutout Rallier pour CommentsController # nouvelle que vous aurez besoin de la carte de la route manuellement:

map.connect '/:post_id/shoutout', :controller => 'comments', :action => 'new' 
+0

Pas vraiment un gros problème, je voulais juste quelque chose d'autre que/postname/comment/new. Comment ce lien serait-il représenté dans la vue d'ailleurs? –

+0

Qu'est-ce qui ne va pas avec/postname/comment/new? – jonnii

+0

Rien à redire vraiment. Je ne voulais juste pas d'URL longues. –

3
map.resources :posts, :has_many => :comments, :collection => {:shoutout => :get} 

fonction clé est :collection, qui points de paires: 'name' = > 'méthode', et vous devez implémenter ce nom dans le contrôleur (et les vues)

+0

Pour moi, c'est l'approche la plus «hygiénique». – lsdr

Questions connexes