Маршруты Rails 3 - как автоматически сопоставить каждое действие (за исключением)? - PullRequest
0 голосов
/ 05 октября 2010

Я относительный новичок в маршрутизации на Rails 3, и теперь он причиняет мне достаточно боли, и я хочу найти настоящее решение.

Пара деталей:

  • У меня есть несколько полураспадающихся контроллеров, которые содержат некоторые методы вне стандартных семи new, создание, редактирование, обновление, уничтожение и т. Д.

  • Как правило, я хочу, чтобы на моей странице маршрутов отображалось все «контроллер / действие», но, возможно, за редким исключением.

  • У меня сложилось впечатление, что использование общего сопоставления, такого как match: controller /: action, не рекомендуется по соображениям безопасности, хотя я предпочитаю использовать данные сеанса, а не параметры, которые легче изменить.

Каков наилучший способ структурирования моего документа маршрутов эффективным способом?

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

вы можете использовать это совпадение в rout.rb:

  match ':controller(/:action(/:id(.:format)))'

или некоторых его вариантах, например get вместо match и т. Д.

Поскольку маршруты разрешаются сверху вниз тогда вы можете использовать свои исключения (и стандартные маршруты ресурсов) выше общее правило маршрута.

Что касается вопросов безопасности - если у вас есть этот общийправило в вашей таблице маршрутизации, тогда вы должны защитить все неактивные методы в контроллере с помощью ключевого слова private .

Существует еще одна проблема с универсальным правилом.Сравните это правило:

get "foo/show/:id", :to => "foo#show"

с общим.Преимущество этого явного правила в том, что оно никогда не вызывается для /foo/show (без идентификатора), поэтому вы не окажетесь в ситуации, когда в вашем методе действия нет params[:id].

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

Так что я считаю, что вам не следует использовать общий маршрут.

0 голосов
/ 05 октября 2010

Вам просто нужно определить весь свой маршрут. Только то, что вам действительно нужно. используйте ресурсы, чтобы сгенерировать какой-то автоматический маршрут для вас с помощью опции: only или: кроме, чтобы избежать бесполезного маршрута.

Меньше у вас есть route в вашем route.rb и лучше. Так что определяй только то, что хочешь, а не больше.

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