Domanda

Quindi abbiamo un sistema legacy che tiene traccia luoghi con ID come "Europa / Francia / Parigi", e sto costruendo una facciata Rails di trasformare questo in URL del tipo http: // foobar / luoghi / Europa / Francia /Parigi. Questo requisito non è negoziabile, il numero dei possibili livelli senza limiti, e non possiamo sfuggire alle barre.

Impostazione routes.rb per http: // foobar / luoghi / Europa è banale:

map.resources :places

... ma http: // foobar / luoghi / Europa / Francia lamenta "Nessuna azione risposto a l'Europa". Ho provato:

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

... ma questo dà lo stesso risultato, come a quanto pare il: id termina al primo '/'. Come faccio a fare l'ID coprire tutto e di più dopo che i "luoghi"?

È stato utile?

Soluzione

Dai un'occhiata alla guida di instradamento per la documentazione completa:

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

In particolare la sezione "4.9 percorso globbing".

Ma penso che ciò che si vuole veramente fare è dichiarare il vostro percorso come:

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

Chiamato con un URL del tipo

/places/foo/bar/1

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

Il che si potrebbe facilmente (ri) si uniscono con "/" per ottenere la stringa completa che vuoi "foo / bar / 1" (probabilmente si dovrà reinserire lo slash iniziale manualmente.

Questo dovrebbe farti andare.

Altri suggerimenti

ho ottimizzato la risposta di Cody sopra un po 'a venire con questo:

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

Utilizzando map.place invece di map.connect, Rails sa quello delle risorse abbiamo a che fare e ha generato place_url, place_path ecc aiutanti correttamente.

Ora, la seconda linea di dovrebbe di lavoro, ma non grazie al bug di cui sopra, quindi ecco una soluzione per places_controller.rb che divide manualmente l'ID e imposta il formato, inadempiente a XML:

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top