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.

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top