Rails статическая маршрутизация страниц - есть ли лучший способ? - PullRequest
3 голосов
/ 05 ноября 2010

Чтобы уточнить, вот ситуация:

Я строю действительно простую CMS, которая станет основой для нескольких приложений, которые я планирую создать в будущем.Я бы очень хотел иметь возможность создать страницу с названием «О программе» (которая будет в основном статичной) и автоматически иметь возможность доступа к ней по адресу «/ about» без необходимости изменять маршруты. Rb.

В настоящее время у меня есть подобный маршрут с подстановочными знаками, который прекрасно работает:

match '/*slug', :to => 'pages#dynamic_page', 
                :constraints => { :fullpath => /.+\.html/ }

Проблема в том, что я действительно хотел бы опустить ".html" в конце.Тем не менее, я предпочитаю расширение над URL, как "/ pages / about".Есть ли лучший способ справиться с этим?Проблема, возникающая при удалении ограничения, заключается в том, что запросы к несуществующим элементам проходят через маршрутизатор Rails, что явно меньше, чем хотелось бы, поскольку это дополнительные издержки, которые необходимо обработать.

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

Спасибо!

1 Ответ

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

Чтобы решить эту проблему в маршрутизаторе Rails, у вас должна быть возможность просто добавить маршрут к самому низу route.rb, который выглядит примерно так:

match '/:slug(.:format)', :to => 'pages#dynamic_page'

В скобках отмечен параметр: formatмаршрута как необязательный, поэтому / about или /about.html должны работать.

Это должно быть в нижней части файла маршрутов, чтобы он не мешал вашемудругие маршруты.

Если вы хотите избежать использования маршрутизатора Rails, у вас есть два варианта, несколько более продвинутых.

  1. В конфигурации вашего веб-сервера добавьте переписатьправило, которое сопоставляет / примерно с другим URI.

  2. Добавьте промежуточное программное обеспечение Rack или Rails metal для обработки ваших статических маршрутов страниц.Это позволяет избежать выполнения этих запросов через весь стек маршрутизации Rails, но маршрутизатор Rails 3 довольно быстрый, и я не уверен, стоит ли добавлять такую ​​сложность только для обслуживания полустатической страницы.

Вы также можете заглянуть в камень High Voltage .Это движок Rails для обслуживания в основном статических страниц.По умолчанию он дает вам URL-адрес в стиле / pages / about, но затем вы можете добавить к своим маршрутам следующее, чтобы сделать его красивее:

# High Voltage treats pages like a REST resource; the page's name is the ID 
match '/:id(.:format)', :to => 'high_voltage/pages#show'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...