Соединение страниц
Веб-приложение крайне редко состоит из одной страницы. Посмотрим, как можно
добавить к нашему простейшему приложению еще один впечатляющий пример
веб-дизайна.
Обычно разнородные страницы приложения соответствуют различным представлениям.
В данном случае для работы со страницей мы будем также использовать
и новый метод действия (и это, как мы увидим далее в книге, делается вовсе
не случайно). Для обоих действий мы используем один и тот же контроллер. Вообще-
то так не делается, но в данном случае использовать новый контроллер нам
просто ни к чему.
Вы уже знаете, как можно добавить новые представление и действие к Rails-
приложению. Чтобы добавить действие, мы определяем в контроллере новый метод.
Назовем это действие goodbye. Теперь наш контроллер приобретет следующий
вид:
Листинг файла app/controllers/say_controller.rb
class SayController < AppticationController
def hello
@>time = Time, now
end
def goodbye
end
end
Затем нам надо создать новый шаблон в каталоге app/views/say. На сей раз он
будет называться goodbye.rhtml, поскольку по умолчанию шаблоны называются
по имени соответствующего действия.
Листинг файла app/views/say/goodbye.rhtml
Увидимся!
<|11>до свидания!
Очень приятно, что Вы нас навестили.
Опять обратимся к нашему, уже испытанному браузеру, но на этот раз укажем
на наше новое действие, воспользовавшись URL http://localhost:3000/say/goodbye.
Мы должны увидеть следующую картину.
Теперь нам нужно связать два экрана воедино. Мы поместим на страницу hello
ссылку, которая приведет нас на страницу goodbye, и наоборот. В серьезном приложении
нам, скорее всего, захочется создать соответствующие кнопки, но здесь
мы воспользуемся простыми гиперссылками.
Мы уже знаем, что в Rails используется соглашение, согласно которому из
URL извлекаются имя требуемого контроллера и имя действия, определенного
в этом контроллере. Поэтому в наших ссылках проще всего воспользоваться этим
URL-соглашением. Тогда в файле hello.rhtml появится следующий фрагмент:
Скажите <а href="/say/goodbye" >До свидания!
А в файле goodbye.rhtml появится указание другого пути:
'. На сей раз он
яы называются
гтот раз укажем
ЭОО/say/goodbye.
<р>
Скажите <а href="/say/hello" >Привет!
Этот подход вполне работоспособен, но имеет свои слабые места. Если нам понадобится
переместить приложение на веб-сервере в другое место, URL может
устареть. К тому же мы закладываем в наш код предположения относительно
URL-формата, используемого Rails, который в будущих версиях может претерпеть
изменения.
К счастью, мы можем обойтись без всякого риска. Rails поставляется с массой
вспомогательных методов, которые можно использовать в шаблонах представлений.
В данном случае мы воспользуемся вспомогательным методом l i n k _ t o ,
который создает гиперссылку на действие1. При использовании 1 i nk_to файл
hello.rhtml приобретает следующий вид:
Листинг файла work/demo4/app/views/say/hello.rhtml
<т.тт.1е>Привет, RaiIs!
<п1>Привет от Rails!
Сейчас <%= @time %>.
Настало время
<%= l i n k _ t o "попрощаться!"
Метод link_to вызывается внутри ERb-последовательности <%=. . .%>. В результате
создается ссылка на URL, который вызовет действие goodbye. Первым
параметром в вызове метода link_to является текст, отображаемый в гиперссылке,
а следующий параметр предписывает Rails сгенерировать ссылку на действие
goodbye. Если не указать на другой контроллер, то будет использован текущий.
Давайте ненадолго остановимся и разберемся в том, как создается ссылка. Мы
набрали следующий текст:
link_to "попрощаться!" , raction => "goodbye"
Первым следует вызов метода link_to . (В Rails мы вызываем методы, облегчающие
написание помощников шаблонов.) У тех, кто ранее работал с такими
языками, как Java, нетребовательность Ruby в отношении скобок вокруг параметров
метода может вызвать удивление. Если вам захочется, то вы всегда их сможете
добавить.
Фрагмент : action представляет собой обозначение, свойственное языку Ruby,
Вы можете рассматривать двоеточие, как что-то, что называется..., поэтому
: action означает что-то, названное действием. Фрагмент => "goodbye" связывает
строку попрощаться с именем действия. На самом деле так указываются
ключевые параметры метода. Rails дает возможность более широкого использования
этого средства: если метод воспринимает несколько параметров, часть из которых
являются необязательными, вы можете применить его для обозначения
ключевого параметра.
Ну а теперь вернемся к приложению. Если мы укажем в браузере адрес нашей
страницы под названием hello, то теперь она будет содержать ссылку на страницу
goodbye.
Мы можем внести соответствующие изменения в файл goodbye.rhtml, поместит
в него обратную ссылку на страницу hello.
Листинг файла work/demo4/app/views/say/goodbye.rhtml
Увидимся!
До свидания!
Очень приятно, что Вы нас навестили.
<р>
Пошлите <%= l i n k _ t o "Привет" , :action => "hello" %> еще раз.