#ruby-on-rails #ruby-on-rails-3 #routes
#ruby-on-rails #ruby-on-rails-3 #маршруты
Вопрос:
У меня есть несколько статических страниц, которые я пытаюсь создать, например, team, AboutUs, условия предоставления услуг и т.д.
Я пытаюсь создать один контроллер для обработки статических страниц, но мне не хватает некоторых ноу-хау.
Вот что я сделал:
В routes.rb, перед окончанием я добавил это:
match "/:action" => "pages"
Затем я создал контроллер с именем pages_controller.rb
В настоящее время он пуст. Что мне нужно, так это распознавать запросы типа /pages /team или pages / about_us и перенаправлять на нужную статическую страницу. Как я могу это сделать?
Спасибо!
Ответ №1:
Вот как я это делаю:
match '/pages/:page' => "pages#page"
Затем на основе params[:page]
я визуализирую разные статические представления.
У меня это хорошо работает для сайтов с меньшим количеством статических страниц.
Конечно, вы можете явно называть свои маршруты:
match '/about-us' => "pages#about_us"
а затем объявите пустой метод для каждого маршрута в вашем контроллере Pages:
def about_us
end
но я предпочитаю первый способ.
Комментарии:
1. Спасибо — как выглядит ваш контроллер для первого способа, которым вы что-то делаете?
2. На самом деле, я думаю, что у меня получилось … просто пришлось немного с этим поиграть. Спасибо!
Ответ №2:
Другой возможный способ сделать это — поместить что-то вроде этого в нижней части ваших маршрутов:
map.connect ‘*path’, :controller => ‘ваше единственное имя контроллера’, :action => ‘показать’
* path в основном говорит о том, чтобы забрать все, что еще не описано в объявлениях маршрута выше.
Я почти уверен: action => ‘show’ указывает на то, что контроллер вообще не нужен (следовательно, нет необходимости в пустом методе контроллера) и просто отображает шаблон с тем же именем по тому же пути, что и ваш контроллер.
Я даже заставил его работать с вложенными каталогами…
приложение / представления / имя вашего отдельного контроллера / some-new-subdir/foo.html.erb, например, нашли бы соответствие для маршрута: