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

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

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

match '*' => 'content#holding'

и

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

, чтобы соответствовать маршруту с подстановочными знаками, как описаноздесь: Маршрутизация Rails 3 безуспешно.

Вероятно, это действительно простой ответ, но я не мог понять его.

/ РЕДАКТИРОВАТЬ / Забыл упомянуть, что у меня было это правило в самом верху моего файла rout.rb.

Ответы [ 4 ]

40 голосов
/ 30 декабря 2011

Rails должен привязать параметры url к переменной, попробуйте это:

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

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

match '(*foo)' => 'content#holding'
1 голос
/ 30 декабря 2011

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

То, что я придумал, выглядит следующим образом:

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

# in SiteController
def unknown_url
  redirect_to root_url
end

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

РЕДАКТИРОВАТЬ: Как отметил Ник, вы можететакже сделайте перенаправление прямо в файле маршрутов.

1 голос
/ 30 декабря 2011

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

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

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

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want'
0 голосов
/ 30 декабря 2011

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

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

В качестве альтернативы вы можете посмотреть на это: http://onehub.com/blog/posts/rails-maintenance-pages-done-right/

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

...