2011-12-30 3 views
17

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

Я пытался что-то вроде этого:

match '*' => 'content#holding' 

и

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

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

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

/EDIT/ Забыл упомянуть, что у меня было это правило в самой верхней части моего файла route.rb.

+0

Вы указали этот маршрут в самом верху вашего файла маршрутов? – Robin

ответ

39

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

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

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

match '(*foo)' => 'content#holding' 
+0

Это похоже на работу для всех путей, но не для самого корня. Я добавил дополнительный временный корневой путь к вершине route.rb, так что теперь он работает, как я хочу - спасибо! – Nick

+1

Мой конечный результат выглядит следующим образом: "match '* foo' => redirect ('/') #NEWLINE root: to => 'content # holding'" В основном я взял вашу идею, добавил перенаправление, затем перенаправил root временно моя страница проведения. – Nick

+1

см. Мои правки для получения root – klochner

0

Где находится на этой странице "routes.rb"?

Чтобы иметь приоритет над другими маршрутами, его необходимо разместить первым.

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

Или это: Rails: admin-only maintenance mode

+0

Упс - забыл упомянуть, что да, это было в верхней части файла. – Nick

+0

Вы перезапустили сервер?:-) –

+0

обновил ответ –

0

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

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

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

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want' 
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: Как указал Ник, вы также можете сделать перенаправление непосредственно в файле маршрутов.

+0

Да. Я тоже это заметил. Вы также можете сделать переадресацию прямо на маршрутах.rb - см. Мой комментарий выше на ответ klochner – Nick

+0

@ Ник Ах, теперь это изящно. Перейдем к этому решению. – cvshepherd

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

  • Нет связанных вопросов^_^