Здравствуйте, записался на курс. При этом ставил галочку на "обучаться с тьютором". На email пришло письмо, о том, что записался на самостоятельное изучение курса. Как выбрать тьютора? |
Заполнение шаблона
Ссылки в шаблоне
Теперь, когда мы закончили шаблон сайта с достойным стилем, пришло время приступить к заполнению ссылок которые мы заглушили символом ’#’. Конечно, мы могли бы просто захардкодить ссылки:
<a href="/static_pages/about">About</a>
но это не Rails Way. Было бы хорошо, если бы URL для about страницы был /about, а не /pages/about. Причем, Rails конвенционально использует named routes (именованные маршруты), которые включают в себя код, подобный
<%= link_to "About", about_path %>
Таким образом код обретает более прозрачный смысл и, к тому же, это более гибкий подход, поскольку мы можем изменить определение about_path и URL изменятся везде где используется about_path.
Полный список наших запланированных ссылок представлен в Таблице 5.1, вместе с соответствием URL и маршрутов. Со временем, мы реализуем все ссылки, но предпоследнюю мы добавим только в конце этой главы, а последняя будет создана лишь в Главе 8.
Страница | URL | Именованный маршрут |
---|---|---|
Home | / | root_path |
About | /about | about_path |
Help | /help | help_path |
Contact | /contact | contact_path |
Sign up | /signup | signup_path |
Sign in | /signin | signin_path |
Прежде чем двигаться дальше, давайте добавим страницу Contact (было оставлено в качестве упражнения в Главе 3). Тесты представлены в Листинге 5.17; они просто следуют модели из Листинга 3.19.
require 'spec_helper' describe "Static pages" do . . . describe "Contact page" do it "should have the content 'Contact'" do visit '/static_pages/contact' expect(page).to have_content('Contact') end it "should have the title 'Contact'" do visit '/static_pages/contact' expect(page).to have_title("Ruby on Rails Tutorial Sample App | Contact") end end endЛистинг 5.17. Тесты для страницы Contact. spec/requests/static_pages_spec.rb
Для того чтобы убедиться что оба теста в Листинге 5.17 не проходят, нам нужно закомментировать "Contact" ссылку в подвале, как это показано в Листинге 5.18.
<footer class="footer"> <small> <a href="http://railstutorial.org/">Rails Tutorial</a> by Michael Hartl </small> <nav> <ul> <li><%= link_to "About", '#' %></li> <li><%#= link_to "Contact", '#' %></li> <li><a href="http://news.railstutorial.org/">News</a></li> </ul> </nav> </footer>Листинг 5.18. Закоментирование ссылки “Contact” в подвале. app/views/layouts/_footer.html.erb
В Листинге 5.18 мы видим как выглядят коментирование кода в Embedded Ruby, что подразумевает помещение знака Ruby-комментария # сразу за знаком процента:
<%#= link_to "Contact", '#' %>
В этой точке тест из Листинга 5.17 должен быть провальным:
$ bundle exec rspec spec/requests/static_pages_spec.rb
Код приложения параллелен коду для добавления страницы About в Разделе 3.2.2: вначале мы обновляем маршруты (Листинг 5.19), затем добавляем contact действие в контроллер StaticPages (Листинг 5.20) и, наконец, мы создаем представление Contact (Листинг 5.21).
SampleApp::Application.routes.draw do get "static_pages/home" get "static_pages/help" get "static_pages/about" get "static_pages/contact" . . . endЛистинг 5.19. Добавление маршрута для страницы Contact. config/routes.rb
class StaticPagesController < ApplicationController . . . def contact end endЛистинг 5.20. Добавление действия для страницы Contact. app/controllers/static_pages_controller.rb
<% provide(:title, 'Contact') %> <h1>Contact</h1> <p> Contact Ruby on Rails Tutorial about the sample app at the <a href="http://railstutorial.org/contact">contact page</a>. </p>Листинг 5.21. Представление для страницы Contact. app/views/static_pages/contact.html.erb
Теперь убедитесь что тесты проходят:
$ bundle exec rspec spec/requests/static_pages_spec.rb
В этой точке, пройдя через Красный-Зеленый цикл для того чтобы убедиться что мы тестируем правильные вещи, нам следует раскомментировать ссылку "Contact" в подвале (Листинг 5.22). Это далеко не идеальное решение так как теперь наши тесты не смогут отловить регрессию если мы случайно удалим тег h1 из Листинга 5.22. Исправление этой ошибки, требующее наприсания теста специально для содержимого h1 оставлено в качестве упражнения (Раздел 5.6).
<footer class="footer"> <small> <a href="http://railstutorial.org/">Rails Tutorial</a> by Michael Hartl </small> <nav> <ul> <li><%= link_to "About", '#' %></li> <li><%= link_to "Contact", '#' %></li> <li><a href="http://news.railstutorial.org/">News</a></li> </ul> </nav> </footer>Листинг 5.22. Раскоментирование ссылки “Contact” в подвале. app/views/layouts/_footer.html.erb