2009-02-13 12 views
1

Voici la routes.rb:Rails ressources imbriquées

map.resources :assignments, :shallow => true do |assignment| 
    assignment.resources :problems 
end 

Comment puis-je obtenir l'URL pour modifier un problème (/ missions/xyz/problèmes/abc/modifier), dans le code? J'ai essayé les deux
edit_assignment_problem_path (affectation, problème)
et edit_problem_path (problème).
Alors que le premier fonctionne sur ma configuration locale, le serveur indique que la méthode edit_assignment_problem_path n'est pas définie. Des idées?

Répondre

11

Exécuter ce à votre ligne de commande:

rake routes 

Il vous dira tous les itinéraires que vous avez définis, et la façon dont ils carte. Très utile.

1

Découvrez également le routing guide qui pourrait vous apprendre beaucoup de choses nouvelles.

+3

Ce lien est rompu. Le guide d'acheminement peut maintenant être trouvé à http://guides.rubyonrails.org/routing.html – chiborg

2

: shallow => true a été introduit dans Rails 2.2. Votre installation locale exécutait probablement une version antérieure alors que votre serveur fonctionnait probablement en version 2.2 ou antérieure. Avec les routes peu profondes, vous DEVEZ spécifier la route complète (par exemple/assignments/a/problems/..) pour: index,: create, et: nouvelles actions (parce que ces actions nécessitent le chemin complet) et DOIVENT utiliser le court chemin (par exemple/problems/..) pour: edit,: show,: update, et: destroy actions.

Si vous voulez que les deux versions complètes et courtes de toutes les routes, la seule possibilité est d'utiliser un itinéraire de ressources imbriquée sans profondeur, plus un court trajet, par exemple:

map.resources :assignments, has_many => :problems 
map.resources :problems 

Notez que dans votre exemple, vous ne l'avez pas besoin de utilisez le formulaire de bloc pour map.resources.

Questions connexes