2010-01-11 4 views
0

J'essaie de comprendre le routage Rails de base. J'ai un modèle appelé page que j'ai généré avec un échafaudage. J'ai ajouté une méthode appelée addChild que je voudrais accéder parRuby on rails chemins et routes

'pages/addchild/:id' 

Jusqu'à présent, si bon. Cependant, je veux mettre en place un lien vers cette méthode comme ceci:

<%= link_to 'Add child page', addchild_page_path(page) %> 

En passant l'ID de la page en cours en tant que paramètre.

Quand je charge mon point de vue index (où le lien est), je reçois le message suivant:

undefined local variable or method `addchild_page_path' for #<ActionView::Base:0xb67797d0> 

Ai-je mal compris comment fonctionne la méthode chemin/link_to?

Mon fichier itinéraires ressemble à ceci:

map.resources :pages 
    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 

Tout conseil serait grandement apprécié.

Merci.

Répondre

2

Vous devez ajouter un itinéraire pour pouvoir utiliser les méthodes de chemin nommées.

Puisque vous avez mentionné que vous avez utilisé un échafaudage, vous avez probablement la configuration de la route comme une ressource, donc tout ce que vous devez faire est d'ajouter la méthode:

map.resources :pages, :member => {:addchild => :get} 

Souhaitez-vous donner un addchild_pages_path (et le réel créé chemin ressemblerait /pages/:id/addchild

vous utilisez ensuite comme ceci: addchild_pages_path page, ne pas appeler la méthode id directement car il n'est pas de ressources (vous ne pourrez pas utiliser la to_param dans la classe de page, que vous pouvez faire plus tard)

Si vous voulez vraiment l'URL pour montrer comme /pages/addchild/:id (que je ne recommande pas) vous pouvez ajouter

map.addchild_page "/pages/addchild/:id", :controller => :pages, :method => :addchild 

avant la map.resources :pages ligne dans votre routes.rb, puis utilisez la méthode du chemin comme ci-dessus .

+0

Merci. Oui, je voulais que l'URL soit formatée par défaut, j'ai juste fait une faute de frappe. – Dan