Frage

So haben wir ein Legacy-System bekommen, die Orte mit IDs wie „Europa / Frankreich / Paris“ verfolgt, und ich baue eine Rails Fassade dies in URLs wie http zu drehen: // foobar / places / Europa / Frankreich /Paris. Diese Forderung ist nicht verhandelbar, die Anzahl der möglichen Ebenen in unbegrenzt, und wir können die Schrägstriche nicht entziehen.

Einrichten routes.rb für http: // foobar / places / Europa trivial ist:

map.resources :places

... aber http: // foobar / places / Europa / Frankreich beklagt "Keine Aktion nach Europa reagiert". Ich habe versucht:

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

... aber das gibt das gleiche Ergebnis, wie offenbar die: id an dem ersten ‚/‘ endet. Wie mache ich die ID deckt alles und alles nach dem „Ort“?

War es hilfreich?

Lösung

Haben Sie einen Blick auf die Routing-Handbuch für eine vollständige Dokumentation:

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

Im einzelnen Abschnitt "4.9 Strecke Platzhalter".

Aber ich denke, was Sie wirklich tun möchte, ist die Route erklären wie:

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

Wird aufgerufen, mit einer URL wie

/places/foo/bar/1

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

Was könnte man leicht (wieder) kommen mit „/“ die vollständige Zeichenfolge erhalten Sie „foo / bar / 1“ wollen (Sie wahrscheinlich den führenden Schrägstrich manuell wieder einsetzen müssen.

Das sollte erhalten Sie gehen.

Andere Tipps

gezwickt I Codys Antwort oben leicht mit diesem zu kommen:

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

Durch die Verwendung von map.place statt map.connect, Rails weiß, was Ressource wir es zu tun haben und erzeugt place_url, place_path etc Helfer richtig.

Nun wird die zweite Zeile sollte Arbeit, aber nicht durch den Fehler oben, so ist hier eine Abhilfe für places_controller.rb, die manuell die ID spaltet und setzt das Format, in XML säumigen:

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top