URL di supporto come / similar-to-: product in Ruby on Rails?
-
02-07-2019 - |
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.
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?