Здравствуйте, записался на курс. При этом ставил галочку на "обучаться с тьютором". На email пришло письмо, о том, что записался на самостоятельное изучение курса. Как выбрать тьютора? |
Заполнение шаблона
Rails маршруты
Теперь, когда у нас есть нужные нам тесты для URL, пришло время заставить их работать. Как отмечалось в Разделе 3.1, Rails использует для маршрутов файл config/routes.rb. Если вы посмотрите на дефолтный, файл routes.rb, вы увидите беспорядок, но это полезный беспорядок — полный закомментированных примеров маршрутов. Я советую почитать его как-нибудь, а также взглянуть на статью о маршрутах в (rus)Rails Guides для более углубленного изучения маршрутов.
Для того чтобы определить именованные маршруты нам необходимо заменить такие маршруты как
get 'static_pages/help'
на
match '/help', to: 'static_pages#help', via: 'get'
Это дает нам два варианта возможных варианта написания пути к странице help: /help (отвечающую на GET запросы) и именованный маршрут help_path который возвращает путь к этой странице. (На самом деле использование get вместо match даст тот же именованнный маршрут, но использование match более принято.)
Применение этого паттерна к остальным статическим страницам приводит нас к Листингу 5.24. Единственным исключением здесь является страница Home, о которой мы позаботимся в Листинге 5.26.
SampleApp::Application.routes.draw do match '/help', to: 'static_pages#help', via: 'get' match '/about', to: 'static_pages#about', via: 'get' match '/contact', to: 'static_pages#contact', via: 'get' . . . endЛистинг 5.24. Маршруты для статических страниц. config/routes.rb
Если вы внимательно почитаете код в Листинге 5.24, вы возможно сможете понять что он делает; например, вы можете увидеть что
match '/about', to: 'static_pages#about', via: 'get'
устанавливает соответствие между GET запросом к ’/about’ и именованным маршрутом, а также направляет его в about действие контроллера StaticPages. Прежде это было более очевидно: мы использовали
get 'static_pages/about'
для того чтобы попасть в то же место, но /about более краток. В дополнение, как отмечалось выше, код match ’/about’ также автоматически создает именованные маршруты для использования в контроллерах и представлениях:
about_path -> '/about' about_url -> 'http://localhost:3000/about'
Обратите внимание, что about_url это полный URL http://localhost:3000/about (localhost:3000 заменится на доменное имя, такое как , для развернутого сайта). Как обсуждалось в Разделе 5.3, для того чтобы получить просто /about, вы используете about_path. (Rails Tutorial использует path форму по соглашению, но разница редко имеет значение на практике (т.е также возможно применение _url формы).)
После определения этих маршрутов тесты для About, Contact, и Help страниц должны пройти:
$ bundle exec rspec spec/requests/static_pages_spec.rb
Это оставляет один провальный тест для страницы Home.
Для маршрута Home страницы мы могли бы использовать код вроде этого:
match '/', to: 'static_pages#home', via: 'get'
Однако делать этого не придется; Rails имеет специальный маршрут для корневого URL / ("слэш") расположенный внизу файла (Листинг 5.25).
SampleApp::Application.routes.draw do . . . # You can have the root of your site routed with "root" # root 'welcome#index' . . . endЛистинг 5.25. Закомментированная подсказка для определения root маршрута. config/routes.rb
Используя Листинг 5.25 как модель, мы приходим к Листингу 5.26 чтобы направить корневой URL / к Home странице.
SampleApp::Application.routes.draw do root 'static_pages#home' match '/help', to: 'static_pages#help', via: 'get' match '/about', to: 'static_pages#about', via: 'get' match '/contact', to: 'static_pages#contact', via: 'get' . . . endЛистинг 5.26. Добавление соответствия для root маршрута. config/routes.rb
Этот код направляет корневой URL / к /static_pages/home, а это означает что http://localhost:3000/ наконец то покажет нечто иное нежели дефолтную Rails страницу из Этот код направляет корневой URL / к /static_pages/home, а это означает что http://localhost:3000/ наконец то покажет нечто иное нежели дефолтную Rails страницу из рис. 1.3. Он также дает нам следующие URL хелперы:. Он также дает нам следующие URL хелперы:
root_path -> '/' root_url -> 'http://localhost:3000/'
При этом, все маршруты для статических страниц работают и тесты должны пройти:
$ bundle exec rspec spec/requests/static_pages_spec.rb
Теперь нам осталось просто заполнить ссылки в макете.
Именованные маршруты
Давайте применим именованные маршруты, созданные в Разделе 5.3.2. Это повлечет за собой заполнение второго аргумента link_to функции правильным именованным маршрутом. Например, мы конвертируем
<%= link_to "About", '#' %>
в
<%= link_to "About", about_path %>
и так далее.
Мы начнем с партиала _header.html.erb (Листинг 5.27), который содержит ссылки на Home и Help страницы. Пока мы здесь, мы также, следуя общей конвенции Сети, свяжем логотип с Home страницей.
<header class="navbar navbar-fixed-top navbar-inverse"> <div class="navbar-inner"> <div class="container"> <%= link_to "sample app", root_path, id: "logo" %> <nav> <ul class="nav pull-right"> <li><%= link_to "Home", root_path %></li> <li><%= link_to "Help", help_path %></li> <li><%= link_to "Sign in", '#' %></li> </ul> </nav> </div> </div> </header>Листинг 5.27. Партиал _header со ссылками. app/views/layouts/_header.html.erb
У нас не будет именованного маршрута для "Sign in" ссылки, до Главы 8, поэтому мы пока оставили ее в виде ’#’.
Другим местом со ссылками является партиал подвала, _footer.html.erb, в котором есть ссылки для About и Contact страниц (Листинг 5.28).
<footer class="footer"> <small> <a href="http://railstutorial.org/">Rails Tutorial</a> by Michael Hartl </small> <nav> <ul> <li><%= link_to "About", about_path %></li> <li><%= link_to "Contact", contact_path %></li> <li><a href="http://news.railstutorial.org/">News</a></li> </ul> </nav> </footer>Листинг 5.28. Партиал _footer со ссылками. app/views/layouts/_footer.html.erb
Теперь наш макет имеет ссылки на все статические страницы созданные в Главе 3, так, например, /about ведет к About странице ( рис. 5.8).
Кстати, стоит отметить, что мы на самом деле не протестировали на наличие ссылок в шаблоне, наши тесты будут провальными, только если маршруты не определены. Вы можете проверить это, закомментировав один из маршрутов в Листинге 5.24 и запустив ваш набор тестов. Метод тестирования который на самом деле обеспечивает уверенность что ссылки существуют и отправляют в правильные места, см. в Разделе 5.6.