Поддерживаете ли URL-адреса, такие как / Similar-to-: продукт в Ruby on Rails? - PullRequest
3 голосов
/ 23 сентября 2008

Я пытался использовать route.rb для создания URL / продукта, похожего на: (где продукт является динамическим) для моего веб-сайта. Проблема в том, что route.rb легко поддерживает URL-адреса, подобные /: product-Similar, но не поддерживает первые, поскольку требует: перед продуктом должен стоять разделитель («/» является разделителем, а «-» - нет). Список разделителей находится в ActionController :: Routing :: SEPARATORS.

Я не могу добавить '-' в качестве разделителя, потому что: product также может содержать дефис. Каков наилучший способ поддержки такого URL?

Один из способов, который я успешно попробовал, - это не использовать route.rb и не помещать логику разбора URL в сам контроллер, но это не самый чистый способ.

Ответы [ 4 ]

2 голосов
/ 23 сентября 2008

Я бы реорганизовал ваши URL так, чтобы они были просто "похожи на / product"

1 голос
/ 25 сентября 2009

Простым решением является использование фильтра маршрутизации . См. README для деталей.

С помощью фильтра маршрутизации вы можете получить URL /similar-to-:product, предварительно обработав его до /similar-to/:product, прежде чем он перейдет к распознаванию маршрутизации. Вы также захотите постобработать сгенерированные пути обратно от /similar-to/:product до /similat-to-:product.

1 голос
/ 06 сентября 2009

Фактически вы можете добавить - в качестве разделителя, а затем использовать маршрутизацию.

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

тогда в ProductsController # аналогично

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

Хотя рефакторинг кажется более приятным, поскольку при таком подходе вам нужно специально обрабатывать все слагы, которые могут содержать дефисы.

0 голосов
/ 23 сентября 2008

Я немного растерялся, но не могли бы вы добавить "к-" в качестве разделителя?

...