Domanda

Ho provato a usare route.rb per creare un URL / simile a: prodotto (dove il prodotto è dinamico) per il mio sito web. Il problema è che route.rb supporta prontamente URL come /: product-similar ma non supporta il primo perché richiede: il prodotto deve essere preceduto da un separatore ('/' è un separatore ma '-' non lo è). L'elenco dei separatori è in ActionController :: Routing :: SEPARATORS.

Non riesco ad aggiungere '-' come separatore perché: il prodotto può contenere anche un trattino. Qual è il modo migliore per supportare un URL come questo?

Un modo che ho provato con successo è di non usare route.rb e mettere la logica di analisi dell'URL nel controller stesso, ma non è il modo più pulito.

È stato utile?

Soluzione

In effetti è possibile aggiungere - come separatore, quindi utilizzare il globbing del percorso.

map.similar_product '/similar-to-*product', :controller => 'products', :action => 'similar'

quindi, in ProductsController # similar

@product = Product.find_by_slug params[:product].join('-')

Anche se il refactoring sembra più bello, poiché con questo approccio dovrai gestire in modo speciale tutte le lumache che possono contenere trattini.

Altri suggerimenti

Riformulerei i tuoi URL in modo che siano semplicemente " simili a / product "

Una soluzione semplice sta usando un filtro di routing . Vedi il README per i dettagli.

Con il filtro di routing puoi avere un URL / similar-to-: product , preelaborarlo in / similar-to /: product prima che arrivi al riconoscimento del routing. Ti consigliamo inoltre di post-elaborare i percorsi generati da / similar-to /: product a / similat-to-: product .

Sono un po 'confuso, ma potresti forse aggiungere " a- " come separatore?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top