Question

J'essayais d'utiliser routes.rb pour créer une URL / similaire à:: produit (où le produit est dynamique) pour mon site Web. Le problème est que routes.rb prend facilement en charge les URL telles que /: product-similar mais ne prend pas en charge les anciennes, car il est nécessaire que: product soit précédé d'un séparateur ('/' est un séparateur mais '-' ne l'est pas). La liste des séparateurs est dans ActionController :: Routing :: SEPARATORS.

Je ne peux pas ajouter '-' en tant que séparateur car: product peut également contenir un trait d'union. Quel est le meilleur moyen de prendre en charge une URL de ce type?

L’une des méthodes que j’ai essayée avec succès est de ne pas utiliser routes.rb et de placer la logique de traitement des URL dans le contrôleur lui-même, mais ce n’est pas le moyen le plus propre.

Était-ce utile?

La solution

En fait, vous pouvez ajouter - en tant que séparateur, puis utiliser un parcours complet.

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

puis, dans ProductsController # similaire

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

Bien que le refactoring semble plus agréable, car avec cette approche, vous devrez gérer spécialement toutes les limaces pouvant contenir des traits d'union.

Autres conseils

Je refactoriserais vos URL pour qu'elles soient simplement "similaires à / produit"

.

Une solution simple consiste à utiliser un filtre de routage . Voir le fichier README pour plus de détails.

Avec le filtre de routage, vous pouvez avoir une URL / similar-to-: product , la pré-traiter sur / similar-to /: product avant qu'elle ne soit reconnue par le routage. Vous voudrez également post-traiter les chemins générés de / similar-to /: product à / similat-to-: product .

Je suis un peu confus, mais pourriez-vous éventuellement ajouter "to-" en tant que séparateur?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top