Question

Nous avons donc un système existant qui suit les lieux avec des ID comme « Europe / France / Paris », et je suis la construction d'une façade Rails pour la transformer en URL comme http: // foobar / lieux / Europe / France /Paris. Cette exigence est pas négociable, le nombre de niveaux possibles en illimité, et nous ne pouvons pas échapper aux barres obliques.

Mise en place routes.rb http: // foobar / lieux / Europe est trivial:

map.resources :places

... mais http: // foobar / lieux / Europe / France se plaint "Aucune action a répondu à l'Europe". J'ai essayé:

map.connect '/places/:id', :controller => 'places', :action => 'show' 

... mais cela donne le même résultat, comme apparemment le: id se termine au premier « / ». Comment puis-je faire couvrir l'ID quoi que ce soit et tout après les « lieux »?

Était-ce utile?

La solution

Jetez un coup d'oeil au Guide de routage pour une documentation complète:

http://guides.rubyonrails.org/routing.html

Plus précisément la section "4.9 Route englobement".

Mais je pense que ce que vous voulez vraiment faire est de déclarer votre itinéraire comme:

map.connect '/places/*id', :controller => 'places', :action => 'index'

Appelé avec une URL comme

/places/foo/bar/1

Yields a params[:id] => ["foo", "bar", "1"]

Que vous pourriez facilement (re) joindre à « / » pour obtenir la chaîne complète que vous voulez « foo / bar / 1 » (vous devrez probablement re-insérer la barre oblique manuellement.

Cela devrait aller.

Autres conseils

Je peaufiné la réponse de Cody légèrement au-dessus pour arriver à ceci:

map.place '/places/*id', :controller => 'places', :action => 'show'
map.connect '/places/*id.:format', :controller => 'places', :action => 'show'

En utilisant map.place au lieu de map.connect, Rails sait ce que les ressources que nous avons affaire et généré place_url, aides place_path etc correctement.

Maintenant, la 2ème ligne devrait travaux, mais pas grâce au bug ci-dessus, voici donc une solution de contournement pour places_controller.rb qui divise manuellement l'ID et définit le format, par défaut XML:

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top