URL моей страницы похожи на '/ about', а URL моих городов - на '/ san-francisco'.
Если вы не используете пространства имен для URL-адресов двух разных типов объектов, вы не сможете отличить их друг от друга, не выполнив дополнительную проверку по БД (дорогой) или жестко закодированному списку.городов / страниц (хрупкие) каждый раз, когда вы получаете запрос на любую страницу / город на вашем сайте.
Если вы, возможно, можете использовать пространство имен для URL-адресов, это лучший способ сделать это, поэтому имейте:
cities/san-fransisco
или
pages/about
в зависимости от того, что вы чувствуетеэто наиболее важно сохранить на корневом уровне.Если в любом случае есть страница / города, ваши пользователи могут держать их под этим, что позволяет им легко переходить на страницу городов и видеть соотношение между URL-адресами, а также позволяет позже отображать города / топ и т. Д. И т. Д.Маршруты будут тогда очевидны
get "cities/:slug", :to => "cities#show", :as => city
get ":slug", :to => "site#show", :as => page
и позволят избежать проблем с конфликтом.
Если вы должны держать города на корневом уровне, вы можете поместить страницы в / pages и оставить города в качестве корневого уровня.В противном случае вы застряли, выполняя дополнительную работу по определению маршрутов (поиск при каждом входе в маршрут).
Еще одна вещь, которую вы могли бы рассмотреть, это добавить числовой идентификатор в города, это поможет вам справиться с конфликтующими именами какну (довольно часто в США, очень часто в мире), так что у вас есть
/1-san-francisco
/2-san-francisco (San Francisco, Minnesota)
и для маршрутов:
get ":slug", :to => "cities#show", :as => city, :constraints => { :slug => /\d*-[\w]*/ }
get ":slug", :to => "site#show", :as => page
Или названия городов по странам (нам/ штат / и т. д.) - если у вас нет возможности их различить, вы, несомненно, столкнетесь с дублированием названий городов в какой-то момент.