2011-01-08 2 views
7

У меня есть приложение для рельсов, которое я построил для старого сайта, который я преобразовал из другого cms (в языке без рельсов, хе-хе). Большинство старых страниц отображаются на новые страницы с помощью route.rb. Но есть еще несколько 404-х.Rails - любые причудливые способы обработки 404s?

Я рельсы newb, поэтому я спрашиваю, есть ли какие-либо усовершенствованные способы обработки 404s. Например, если бы я программировал на своем старом языке, я бы сделал это:

  • Получите URL-адрес (имя_источника), к которому обращались и проанализировали его.
  • Сделайте поиск в базе данных для любых ключевых слов, идентификаторов и т. Д., Найденных в новом URL-адресе.
  • Если найдено, переадресуйте страницу (или если найдено несколько записей, покажите их на странице результатов и выберите пользователя). С рельсами, которые я, вероятно, захочу сделать: status =>: move_permanently Я угадываю?
  • Если не найдено, показать 404.

Есть ли камни/плагины или учебники вы знаете, что будет обрабатывать такую ​​вещь, если это вообще возможно. Или вы можете объяснить на высоком уровне, как это можно сделать? Мне не нужен полный образец кода, просто нажмите в правильном направлении.

PS. Это простое приложение для рельсов 3, которое использует одну модель контента.

+0

О ваших «P.S.», модели ничего не имеют, на самом деле не имеют никакого отношения к маршрутизации. Контролеры позаботятся об этом. :) –

ответ

7

Поместите это в маршрутах (после того, как любой другой маршрут, который у вас есть, это будет захватывать все URL)

match '*url' => 'errors#routing' 

и теперь в контроллере ошибок в маршрутизации действия можно реализовать любые фантазии логики, что вы хотите, и сделать как всегда (вы можете добавить :status => 404 к вызову render). Запрошенный url будет доступен в контроллере как params[:url].

+0

Злой, это именно то, что я искал, чтобы заставить меня двигаться в правильном направлении. Большое спасибо! – jyoseph

0

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

render :file => "#{RAILS_ROOT}/public/404.html", :layout => false, :status => 404 

Может быть, кто-то может прийти лучшее решение.

Смежные вопросы