Ok, je suis relativement nouveau sur les rails et je travaille sur le Rails pour les programmeurs PHP. Pour rendre les choses intéressantes, j'utilise Rails 3 et haml pour travailler à travers le livre, et le livre est écrit en utilisant Rails 2.X et erb donc certains des exemples sont obsolètes.Rails 3 routage
A la question: L'exemple d'itinéraire dans le livre est
map.presentation 'meetings/:meeting_id/presentations/:action/:id',
:controller => "presentations",
:action => "show",
:meeting_id => /\d+/
C'était donc un pré-Rails 3 itinéraire. Mon adaptation de ce qui précède dans une route Rails 3 est:
match 'meetings/:meeting_id/presentations/:action/:id', :to => 'presentations#show', :constraints => {:id => /\d/}
Mon adaptation fonctionne pour la détruire l'action, mais pas pour l'action d'édition ... et en raison de mon manque d'expérience, je ne sais pas ce que je suis mal faire. De l'article ici (http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/) il semble que je le fais bien, mais quelque chose ne va pas .
Les aides link_to
qui produisent les urls sont les suivantes
= link_to 'edit', :controller => 'presentations',
:action => 'edit',
:meeting_id => presentation.meeting.id,
:id => presentation.id
# Incorrectly Produces: http://localhost:3000/presentations/edit?meeting_id=2&id=1
= link_to 'destroy', { :controller => 'presentations',
:action => 'destroy',
:meeting_id => presentation.meeting.id,
:id => presentation.id },
:confirm => 'Are you sure?',
:method => :delete
# Correctly Produces: http://localhost:3000/meetings/2/presentations/destroy/1
Votre aide serait aller un long chemin à éclaircir mon trouble de routage. Merci beaucoup!
EDIT
Voici le fichier routes.rb non-travail dans son intégralité:
UserGroup::Application.routes.draw do
get "presentations/new"
get "presentations/edit"
get "sessions/new"
get "users/index"
get "users/show"
get "users/new"
get "users/edit"
get "meetings/index"
match '/meetings/show/:id', :to => 'meetings#show', :as => 'meeting'
match '/meetings/new', :to => 'meetings#new', :as => 'new_meeting'
match '/meetings/edit/:id', :to => 'meetings#edit', :as => 'edit_meeting'
match 'meetings/:meeting_id/presentations/:action/:id', :to => 'presentations', :constraints => {:id => /\d/}
#default route
match ':controller(/:action(/:id(.:format)))'
end
EDIT 2
Merci à codykrieger je pris un coup d'oeil au reste de le fichier des routes (je sais, duh non?). Apparemment, tous ces "..." itinéraires sont ajoutés lors de l'utilisation du générateur de rails et aider à faire quelques connexions par défaut dans l'application. J'ai commenté la ligne get "presentations/edit"
et, merveille de merveilles, mon adaptation de routage fonctionne réellement.
Cela fonctionne:
UserGroup::Application.routes.draw do
get "presentations/new"
#get "presentations/edit"
get "sessions/new"
get "users/index"
get "users/show"
get "users/new"
get "users/edit"
get "meetings/index"
match '/meetings/show/:id', :to => 'meetings#show', :as => 'meeting'
match '/meetings/new', :to => 'meetings#new', :as => 'new_meeting'
match '/meetings/edit/:id', :to => 'meetings#edit', :as => 'edit_meeting'
match 'meetings/:meeting_id/presentations/:action/:id', :to => 'presentations', :constraints => {:id => /\d/}
#default route
match ':controller(/:action(/:id(.:format)))'
end
J'ai joué avec l'ordre des routes dans le fichier et a également constaté que si je mets ma route au-dessus de toutes les routes générées automatiquement, sans commenter la ligne get "presentations/edit"
, mon itinéraire a toujours l'effet escompté.
Cela fonctionne aussi:
UserGroup::Application.routes.draw do
match 'meetings/:meeting_id/presentations/:action/:id', :to => 'presentations', :constraints => {:id => /\d/}
get "presentations/new"
get "presentations/edit"
get "sessions/new"
get "users/index"
get "users/show"
get "users/new"
get "users/edit"
get "meetings/index"
match '/meetings/show/:id', :to => 'meetings#show', :as => 'meeting'
match '/meetings/new', :to => 'meetings#new', :as => 'new_meeting'
match '/meetings/edit/:id', :to => 'meetings#edit', :as => 'edit_meeting'
#default route
match ':controller(/:action(/:id(.:format)))'
end
Je pense que ce dernier est la meilleure façon d'aller et je devrais faire mes déclarations de routage personnalisées au-dessus de ceux standard générés, mais je ne suis pas sûr. Si quelqu'un là-bas veut commenter sur quelle pratique est meilleure, ou s'il vaut mieux supprimer complètement ceux qui sont générés si je veux spécifier le mien, j'aimerais l'entendre.
Merci à tous :)
Que le reste de vos routes ressemblent-ils? – codykrieger
@codykrieger - en affichant le reste du fichier routes.rb, j'ai trouvé que ma présentation # edit route avait déjà été prononcée via l'une des routes générées plus tôt dans le fichier. Grâce à vous, j'ai posté deux versions qui fonctionnent et je m'interroge maintenant sur une meilleure pratique concernant les routes générées. Merci beaucoup! –
Bien sûr, heureux de l'entendre! :) – codykrieger