Pergunta

Então, nós temos um sistema legado que rastreia lugares com IDs como "Europa / França / Paris", e eu estou construindo um Rails fachada de transformar isso em URLs como http: // foobar / lugares / Europa / França /Paris. Esta exigência não é negociável, o número de possíveis níveis ilimitados, e não podemos escapar das barras.

Configuração routes.rb para http: // foobar / lugares / Europa é trivial:

map.resources :places

... mas http: // foobar / lugares / Europa / França reclama "Nenhuma ação respondeu a Europa". Eu tentei:

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

... mas isso dá o mesmo resultado, como aparentemente o: extremidades id no primeiro '/'. Como posso fazer a qualquer coisa cover ID e tudo depois os "lugares"?

Foi útil?

Solução

Tenha um olhar na guia de encaminhamento para documentação completa:

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

Especificamente seção "4.9 Route englobamento".

Mas eu acho que o que você realmente quer fazer é declarar o seu percurso como:

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

Chamado com uma URL como

/places/foo/bar/1

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

O que você poderia facilmente (re) unir-se com "/" para produzir a cadeia completa você quer "foo / bar / 1" (você provavelmente terá de re-inserção da barra inicial manualmente.

Isso deve você ir.

Outras dicas

Eu mexido resposta de Cody acima ligeiramente para chegar a esta:

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

Ao usar map.place vez de map.connect, Rails sabe o recurso que estamos lidando com e place_url gerado, place_path etc ajudantes corretamente.

Agora, a segunda linha deve trabalho, mas não graças ao bug acima, então aqui está uma solução alternativa para places_controller.rb que manualmente divide o ID e define o formato, falta para XML:

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top