Как я могу создать маршрут Rails 3, который будет соответствовать всем запросам и напрямую на один ресурс / страницу?

17

У меня есть приложение rails (Rails 3.0), которое мне нужно временно вывести из строя. Пока это действует, я хочу создать новый маршрут, который будет направлять все запросы на один кусок статического контента. У меня есть контроллер, настроенный для обслуживания моих статических страниц.

Я пробовал что-то вроде этого:

match '*' => 'content#holding'

и

match '*/*' => 'content#holding'

, чтобы соответствовать шаблону подстановочных знаков, как описано здесь: Rails 3 route globbing без успеха.

Это, вероятно, очень простой ответ, но я не мог понять.

/ <ет> ИЗМЕНИТЬ / Забыл упомянуть, что у меня было это правило в самом верху моего файла route.rb.

    
задан Nick 30.12.2011 в 15:24
источник

4 ответа

39

Rails необходимо связать параметры url с переменной, попробуйте следующее:

match '*foo' => 'content#holding'

Если вы также хотите сопоставить / , используйте скобки, чтобы указать, что foo не является обязательным:

match '(*foo)' => 'content#holding'
    
ответ дан klochner 30.12.2011 в 16:06
источник
1

Я сделал это только вчера и первым придумал решение, которое показывает klochner. То, что мне не понравилось в этом, заключается в том, что все, что вы входите в URL-адрес, остается там после загрузки страницы, и поскольку я хотел, чтобы весь маршрут переадресовывался на мой root_url, это было не очень привлекательно.

Что я придумал, выглядит так:

# in routes.rb
get '*ignore_me' => 'site#unknown_url'

# in SiteController
def unknown_url
  redirect_to root_url
end

Не забудьте вставить запись маршрутов в самую нижнюю часть файла!

EDIT: Как заметил Ник, вы также можете сделать перенаправление непосредственно в файле маршрутов.

    
ответ дан cvshepherd 30.12.2011 в 17:16
источник
0

Где в "routes.rb" находится ли эта строка?

Чтобы иметь приоритет над другими маршрутами, он должен быть помещен первым.

В качестве альтернативы вы можете посмотреть на это: Ссылка

Или это: Rails: режим обслуживания только для администратора

    
ответ дан Sergio Tulentsev 30.12.2011 в 15:28
источник
0

Я столкнулся с чем-то вроде этого, где у меня были имена доменов в качестве параметра в моем маршруте:

match '/:domain_name/', :to => 'sitedetails#index', :domain_name => /.*/, :as =>'sitedetails'

Ключ к этому был /.*/, который был подстановочным значком для почти всего. Так что, возможно, вы могли бы сделать что-то вроде:

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want'
    
ответ дан fregas 30.12.2011 в 17:05
источник