Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
require 'nitro'
require 'controller/book'
Nitro.run(BookController)
Перезапустите сервер WEBrick и перезагрузите страницу, чтобы посмотреть на результат.
Отметим несколько вещей. Файлы шаблонов могут остаться в папке
public
Nitro.run
По умолчанию Nitro ищет шаблоны в каталогах
template
public
public
template
index.xhtml
public/index.xhtml
template/index.xhtml
public
Классы контроллеров могут отображаться на пути URL с помощью файла
Server.map
run.rb
require '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.rb
Book
class 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]
end
end
Теперь контроллер может запрашивать данные у класса
Book
index
def index
book = Book.find_by_author("Mark Twain")
@author = book.author
@title = book.title
@last_update = book.update_time
end
А в файл
run.rb
Book
require 'model/book'
Book.new(:title => "Life on the Mississippi",
:author => "Mark Twain").save
После перезапуска приложения и перезагрузки страницы мы увидим сведения о книге. А если книг больше? Вместо того чтобы «зашивать» в код данные о них, мы можем попросить контроллер выполнить поиск по имени автора. Добавим в него новый метод
find
def find(author)
book = Book.find_by_author(author)
@author = book.author
@title = book.title
@last_update = book.update_time
end
Это тот же код, что в методе
index
index.xhtml
find.xhtml
Nitro::Controller.
Сделаем еще одно замечание по поводу методов контроллера. Методы, предназначенные для обработки запросов на получение страницы, обычно идут в паре с шаблонами, имеющими схожее имя. Для получения конечного результата Nitro объединяет метод и шаблон. Мы видели, что Nitro может работать без контроллеров, ограничиваясь только видами. Но верно и обратное. Метод контроллера может генерировать всю страницу вообще без шаблона. Запросы на получение страниц обрабатываются в Nitro как действия (actions). Действие — это комбинация вида и методов контроллера. Внутри себя Nitro динамически создает методы действия, объединяющие то и другое. Но если какой-то компоненты недостает, ничего страшного не случится. Если у действия нет шаблона, результатом становится значение, возвращаемое методом контроллера.
Например, некоторый URL может отвечать на запрос, возвращая лишь название книги. Для этого достаточно такого метода контроллера
BookController