Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
require 'nitro'require 'controller/book'Nitro.run(BookController)Перезапустите сервер WEBrick и перезагрузите страницу, чтобы посмотреть на результат.
Отметим несколько вещей. Файлы шаблонов могут остаться в папке
publicNitro.runПо умолчанию Nitro ищет шаблоны в каталогах
templatepublicpublictemplateindex.xhtmlpublic/index.xhtmltemplate/index.xhtmlpublicКлассы контроллеров могут отображаться на пути URL с помощью файла
Server.maprun.rbrequire 'nitro'require 'controller/book'Nitro::Server.map = { '/books' => BookController }Nitro.run()Соответствующий шаблон нужно будет переместить в другое место, которое соответствовало бы новому пути (
template/books/index.xhtmlПерезапустите сервер и укажите новый URL:
http://127.0.0.1:9999/booksСейчас самое время создать настоящую страницу сайта, но ради экономии места подавим это желание. Интереснее добавить механизм для запроса данных о нескольких книгах (сколь бы замечательна ни была та, что вы держите в руках). Добавим файл
src/model/book.rbBookclass Book @@items = {} attr_accessor :title attr_accessor :author attr_accessor :update_time def initialize( values = {} ) @title, @author = values[:title], values[:author] @update_time = Time.now end def save @@items[author] = self end def self.find(author) @@items[author] endendТеперь контроллер может запрашивать данные у класса
Bookindexdef index book = Book.find_by_author("Mark Twain") @author = book.author @title = book.title @last_update = book.update_timeendА в файл
run.rbBookrequire 'model/book'Book.new(:title => "Life on the Mississippi", :author => "Mark Twain").saveПосле перезапуска приложения и перезагрузки страницы мы увидим сведения о книге. А если книг больше? Вместо того чтобы «зашивать» в код данные о них, мы можем попросить контроллер выполнить поиск по имени автора. Добавим в него новый метод
finddef find(author) book = Book.find_by_author(author) @author = book.author @title = book.title @last_update = book.update_timeendЭто тот же код, что в методе
indexindex.xhtmlfind.xhtmlNitro::Controller.Сделаем еще одно замечание по поводу методов контроллера. Методы, предназначенные для обработки запросов на получение страницы, обычно идут в паре с шаблонами, имеющими схожее имя. Для получения конечного результата Nitro объединяет метод и шаблон. Мы видели, что Nitro может работать без контроллеров, ограничиваясь только видами. Но верно и обратное. Метод контроллера может генерировать всю страницу вообще без шаблона. Запросы на получение страниц обрабатываются в Nitro как действия (actions). Действие — это комбинация вида и методов контроллера. Внутри себя Nitro динамически создает методы действия, объединяющие то и другое. Но если какой-то компоненты недостает, ничего страшного не случится. Если у действия нет шаблона, результатом становится значение, возвращаемое методом контроллера.
Например, некоторый URL может отвечать на запрос, возвращая лишь название книги. Для этого достаточно такого метода контроллера
BookController
