Вопрос маршрутизации в Rails - PullRequest
0 голосов
/ 12 февраля 2010

Как мне поступить, например, с www.homepage.com/site/about на www.homepage.com/about? Я все еще хотел бы использовать «сайт» в качестве контроллера, я просто хочу удалить его из маршрута.

В отдельном примечании, как вы обычно настраиваете маршруты для страниц типа about и contact, которые появляются сразу после имени сайта?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2010

В отдельном примечании, как вы обычно настраиваете маршруты для страниц типа about и contact, которые появляются сразу после имени сайта?

Если вы следуете принципам REST (и вы, вероятно, должны это делать), то, по большому счету, каждый URL должен заканчиваться на "ресурс" (т. Е. Существительное, "вещь"). Каждый ресурс в свою очередь имеет контроллер, и эти контроллеры имеют стандартизированный и ограниченный набор действий .

Это немного отличается от "классической" схемы маршрутизации, где у контроллера будут более разнообразные действия (и, таким образом, вы сможете объединить больше функциональности в один, более крупный контроллер)

Так, например, в системе RESTful:

  • / contact будет отображаться в ContactController, а не - действие «contact» в каком-либо другом контроллере (как это может быть при классической маршрутизации)
  • / about аналогично сопоставляется с AboutController.
  • / site / about будет отображаться в AboutController, но это будет «вложенный» маршрут в пространстве имен сайта. Если вы хотите получить хардкор о вложенности (и я обычно так делаю), я бы:
    • Поместите AboutController в модуль Site (то есть Sites :: AboutController), который, в свою очередь, хранится в файле /app/controllers/site/about_controller.rb
    • Создание SiteController
    • Карта / сайт для SiteController

Если у вас был ранее существующий сайт: AboutController, сопоставленный с / site / about, и вы хотели переназначить его на / about, вы можете сделать это, используя метод @ rbaezam79. Тем не менее, я бы серьезно подумал о перемещении и переименовании самого класса только для согласованности.

Все ресурсы, которые я перечислил выше, вероятно, будут считаться "синглтонными" ресурсами. Это значит:

  • вы используете map.resource вместо map.resources для сопоставления ваших маршрутов
  • действием по умолчанию является «show» (а не «index», как это делается с не одноэлементными ресурсами). Как правило, это будет единственное действие, которое вам нужно. (Вы бы никогда не захотели создать или удалить страницу о себе, не так ли?)
  • имена, как правило, единственного числа вместо множественного числа. (Хотя я столкнулся с некоторыми камнями преткновения с этим)

При настройке таких маршрутов не забывайте регулярно запускать команду "rake route"; это покажет вам точно, что вы получаете в любой момент времени.

2 голосов
/ 12 февраля 2010

По первому вопросу вы можете добавить что-то подобное в ваши маршруты. Rb:

map.about '/ about',: controller => 'site',: action => 'about'

Что касается второго вопроса, я не совсем понимаю его, можете ли вы быть более конкретным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...