Смешанные динамические маршруты в Rails / Merb - PullRequest
1 голос
/ 04 июля 2010

Я пытаюсь найти лучший способ отобразить простые маршруты в один URL.Приложение содержит 4 модели: местоположение, категория, бюджет, компания.Но каждая модель может быть сопоставлена ​​с одним URL-адресом, как это.Для примера из реальной жизни вы можете проверить http://sortfolio.com/

/chicago <- Location
/3k-5k <- Budget
/bars <- Category
/company-name <- Company

А также они могут быть смешаны в нечто вроде этого:

/chicago/3k-5k <- Location, Budget
/chicago/bars/3k-5k <- Location, Category, Budget
/bars/3k-5k <- Category, Budget
/foo-bar <- Company

Итак, в принципе, существует определенный порядокпараметры:

Location/Category/Budget

Есть 2 маршрута, чтобы соответствовать всем URL:

match('/').to(:controller => 'search', :action => 'index')
match('/:location(/:category(/:budget)))').to(:controller => 'search', :action => 'index')

Но в контроллере это немного сложно, потому что я должен проверить элементы вконкретный заказ.URL-адрес компании идет последним, потому что они могут переопределять системные пути.

Работает нормально, но мне приходится много раз искать по запросу, потому что параметры полностью динамические.Ничего страшного, такая информация может храниться в кеше, но мне просто интересно, есть ли какие-нибудь другие решения или подходы?

У меня есть только одно: иметь 1 дополнительную таблицу для хранения информации о пути икуда это ведет.Другими словами - денормализация таблицы.

+----+----------+------------+
| ID | Url      | ObjectType |
+----+----------+------------+
| 1  | chicago  | location   |
| 2  | bars     | category   |
| 3  | 3k-5k    | budget     |
| 4  | foo-bar  | company    |
+----+----------+------------+

И процесс парсинга URL может быть упакован только в один пользовательский запрос.

Пожалуйста, совет.

...