¿Admite URL como /similar-to-:product en Ruby on Rails?
-
02-07-2019 - |
Pregunta
He estado intentando utilizar rutas.rb para crear una URL /similar-a-:producto (donde el producto es dinámico) para mi sitio web.El problema es que route.rb admite fácilmente URL como /:product-similar pero no admite la primera porque requiere que :product esté precedido por un separador ('/' es un separador pero '-' no lo es).La lista de separadores está en ActionController::Routing::SEPARATORS.
No puedo agregar '-' como separador porque :product también puede contener un guión.¿Cuál es la mejor manera de admitir una URL como esta?
Una forma que he probado con éxito es no usar rutas.rb y colocar la lógica de análisis de URL en el propio controlador, pero esa no es la forma más limpia.
Solución
De hecho puedes agregar -
como separador, luego use la ruta global.
map.similar_product '/similar-to-*product', :controller => 'products', :action => 'similar'
luego, en ProductsController#similar
@product = Product.find_by_slug params[:product].join('-')
Aunque la refactorización parece mejor, ya que con este enfoque necesitarás manejar especialmente todos los slugs que puedan contener guiones.
Otros consejos
Refactorizaría sus URL para que sean simplemente "similares a/producto"
Una solución fácil es utilizar un filtro de enrutamiento.Consulte LÉAME para obtener más detalles.
Con el filtro de enrutamiento puedes tener una URL /similar-to-:product
, preprocesarlo para /similar-to/:product
antes de llegar al reconocimiento de enrutamiento.También querrás postprocesar las rutas generadas desde /similar-to/:product
a /similat-to-:product
.
Estoy un poco confundido, pero ¿podrías agregar "a-" como separador?