
Создание блога на Ruby за 10 минут
Составитель Брайан Леонард (Brian Leonard), редактор Крис Катлер (Chris Kutler)
Апрель 2008 г. [номер версии: V6.1-1]
В данном руководстве рассматривается создание и выполнение простого веб-приложения для работы с базой данных с поддержкой Ruby в среде IDE NetBeans. Выполнение действий, приведенных в этом руководстве, позволяет ознакомиться с решением следующих задач:
- использование задач Rake и файлов переноса для создания и обновления таблиц базы данных;
- использование генератора базового интерфейса для создания базового веб-приложения, позволяющего создавать, читать, обновлять и удалять базу данных;
- изменение представлений для точной настройки веб-страниц.
Содержание
Для работы с этим руководством требуется следующее программное обеспечение.
Создание проекта Ruby on Rails
Начнем с создания проекта Ruby on Rails. По умолчанию приложение создается в структуре каталогов, соответствующей правилам проекта Ruby on Rails для приложений.
Выберите в среде IDE NetBeans "File > New Project".
Выберите Ruby в списке "Categories" и "Ruby on Rails Application" в списке "Projects", как показано на следующем рисунке.
- Нажмите кнопку "Next" для определения имени проекта и его местоположения.
-
Введите rubyweblog в текстовом поле "Project Name", как показано на следующем рисунке.
В остальных полях этой страницы примите установки по умолчанию.
Если выполняются следующие условия, перейдите к действию 8:
- используется имя пользователя
root, установленное по умолчанию;
- имя пользователя
root не требует ввода пароля;
- используется сервер базы данных MySQL.
В среде IDE эти условия предполагаются как условия по умолчанию.
-
Для настройки доступа к базе данных нажмите кнопку "Next".
Выберите пункт меню "Specify Database Information Directly", выберите "Database Adapter" и заполните поля "User Name" и "Password". Оставьте поле "Database Name" пустым.
Нажмите кнопку "Finish" для создания нового проекта.
В среде IDE создается каталог проекта с тем же именем, что и проект, и в области изменения открывается файл с именем database.yml. Обратите внимание на то, что именем базы данных по умолчанию для настройки разработки является rubyweblog_development.
Проверьте правильность адаптера раздела разработки, базы данных, имени пользователя и параметров пароля, затем нажмите небольшую кнопку x на вкладке database.yml для закрытия файла.
Создание базового интерфейса
Это приложение блога основано на модели "Post", посредством которой происходит сохранение сообщений блога. Здесь используется генератор базового интерфейса "Rails" для создания модели и ее контроллера, а также представления индекса (списка), демонстрации, изменения и новых представлений.
С помощью генератора также создается файл переноса для создания таблицы базы данных модели, а также модульный тест и модули-заглушки для записи тестов модели.
В окне "Projects" щелкните правой кнопкой мыши узел проекта "rubyweblog" и выберите "Generate", как показано на следующем рисунке.
-
В диалоговом окне "Rails Generator" выберите "scaffold" в раскрывающемся списке "Generate", как показано на следующем рисунке.
-
Введите Post в текстовом поле "Model Name".
Введите title:string в текстовом поле "Attribute Pairs" и нажмите кнопку "OK".
В окне "Output" отображаются файлы, которые создаются и обновляются генератором базового интерфейса.
Создание базы данных
Этот раздел посвящен использованию задачи Rake для создания базы данных "rubyweblog_development". Файл переноса 001_create_posts.rb используется для добавления в базу данных таблицы сообщений в блоге.
В окне "Projects" щелкните правой кнопкой мыши узел проекта "rubyweblog" и выберите "Run Rake Task > db > create" в контекстном меню.
Задача Rake создает базу данных для варианта настройки разработки согласно определению в файле database.yml.
Примечание: При появлении в окне "Output" сообщений об ошибках проверьте правильность имени пользователя и пароля в разделе разработки файла database.yml. Также убедитесь в том, что сервер базы данных запущен.
В окне "Projects" разверните "Database Migrations" и "migrate".
Для открытия файла в области изменения дважды щелкните узел "001_create_posts.rb", как показано на следующем рисунке.
В открывшемся файле содержится метод self.up, создающий таблицу "posts", и метод self.down, удаляющий таблицу "posts", как показано в следующем примере кода:
class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.string :title
t.timestamps
end
end
def self.down
drop_table :posts
end
end
Обратите внимание, что метод create_table добавляет столбец id по умолчанию, а метод timestamps добавляет столбцы created_at и updated_at в таблицу базы данных.
-
В окне "Projects" щелкните правой кнопкой мыши узел "rubyweblog" и выберите "Migrate Database > To Current Version", как показано на следующем рисунке.
В результате этого действия в базу данных добавляется таблица "posts". В окне "Output" отображается ход процесса переноса, как показано на следующем рисунке.
Выполнение приложения
Теперь протестируйте приложение.
-
В окне "Projects" разверните узел "Configuration" и дважды щелкните routes.rb для его открытия в редакторе.
-
Найдите следующий комментарий.
# map.root :controller => "welcome"
-
Раскомментируйте строку и измените значение контроллера на "posts", как показано ниже.
map.root :controller => "posts"
-
В окне "Projects" разверните узел "Public", щелкните правой кнопкой мыши index.html и выберите "Delete" в контекстном меню.
На странице index.html по умолчанию отображается страница приветствия, которая сейчас не требуется. После удаления index.html Rails обращается к routes.rb для выбора отображаемой страницы.
Выберите "File > Save All" в главном меню.
-
Нажмите кнопку "Run Main Project" на панели инструментов.
После выполнения этого действия запускается сервер WEBrick, который является веб-сервером (на Ruby), предоставляемым как часть платформы Ruby on Rails; при этом в обозревателе отображается следующая страница.
Примечание: Проект может быть настроен для использования на другом сервере. При использовании сервера, отличного от WEBrick, может потребоваться ввести http://localhost:3000/posts в адресную строку обозревателя и нажать клавишу Enter.
-
Щелкните ссылку "New post" для отображения второй страницы приложения, как показано на следующем рисунке.
-
Введите заголовок и нажмите кнопку "Create".
На следующем рисунке показан пример сообщения в блоге.
Для возврата к списку сообщений в блоге щелкните ссылку "Back".
Добавление столбца таблицы
В этом разделе описано добавление столбца body в таблицу сообщений в блоге для сохранения текста каждой записи в блоге.
-
Щелкните правой кнопкой мыши узел "Database Migrations" и выберите "Generate" в контекстном меню.
Откроется диалоговое окно "Rails Generator" с переносом, выбранным в раскрывающемся списке "Generate".
-
Введите AddBodyToPost body:text в текстовом поле "Arguments", как показано на следующем рисунке.
-
Нажмите кнопку "OK".
В среде IDE создается сценарий переноса с версиями 002_add_body_to_post.rb. В открывшемся файле содержится метод self.up, добавляющий столбец body, и метод self.down, удаляющий столбец, как показано в следующем примере кода. Обратите внимание на то, что создаваемый код извлек имя таблицы из первого аргумента AddBodyToPost.
class AddBodyToPost < ActiveRecord::Migration
def self.up
add_column :posts, :body, :text
end
def self.down
remove_column :posts, :body
end
end
-
Щелкните правой кнопкой мыши узел "rubyweblog" и выберите "Migrate Database > To Current Version" в контекстном меню.
Либо щелкните правой кнопкой мыши исходный файл и выберите "Run" в появившемся меню.
В окне "Projects" разверните узел "Views", узел "Posts" и дважды щелкните файл edit.html.erb для его открытия в области изменения.
Добавьте операторы, выделенные полужирным шрифтом в следующем примере кода, в файл edit.html.erb.
В качестве альтернативы можно поместить курсор перед тегом <p> для заголовка и перетащить курсор в позицию после тега окончания абзаца </p>, а затем нажать комбинацию клавиш Ctrl+Shift+стрелка вниз для дублирования строк. Замените Title на Body, а f.text_field :title замените на f.text_area :body.
<h1>Editing post</h1>
<%= error_messages_for :post %>
<% form_for(@post) do |f| %>
<p>
Title<br />
<%= f.text_field :title %>
</p>
<b><p>
<b>Body</b><br />
<%= f.text_area :body %>
</p></b>
<p>
<%= f.submit "Update" %>
</p>
<% end %>
<%= link_to 'Show', @post %> |
<%= link_to 'Back', posts_path %>
Дважды щелкните файл new.html.erb для его открытия в области изменения.
Добавьте операторы, выделенные полужирным шрифтом в следующем примере кода, в файл new.html.erb. В качестве альтернативы используйте Ctrl+Shift+стрелка вниз для дублирования абзаца "Title" и измените дублированный код, как описано в действии 6.
<h1>New post</h1>
<%= error_messages_for :post %>
<% form_for(@post) do |f| %>
<p>
Title<br />
<%= f.text_field :title %>
</p>
<b><p>
<b>Body</b><br />
<%= f.text_area :body %>
</p></b>
<p>
<%= f.submit "Create" %>
</p>
<% end %>
<%= link_to 'Back', posts_path %>
Дважды щелкните файл show.html.erb для его открытия в области изменения.
Добавьте операторы, выделенные полужирным шрифтом в следующем примере кода, в файл show.html.erb. В качестве альтернативы используйте Ctrl+Shift+стрелка вниз для дублирования абзаца "Title", как описано в действии 6, замените Title: на Body: и замените @post.title на @post.body.
<p>
Title:
<%=h @post.title %>
</p>
<b><p>
<b>Body:</b>
<%=h @post.body %>
</p></b>
<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %>
Выберите "File > Save All" в главном меню.
Вернитесь в обозреватель и щелкните ссылку "New Post" для вывода нового столбца body, как показано на следующем рисунке.
Создайте еще несколько сообщений блога.
После выполнения этих действий нажмите кнопку "Back" для возврата на страницу "Listing posts".
Подтверждение правильности ввода
В этом разделе к классу Post добавляется код, обеспечивающий ввод пользователем данных в полях заголовка и тела сообщения.
В окне "Projects" разверните узел "Models" и дважды щелкните файл post.rb для его открытия в редакторе.
Вставьте строку в определении класса, введите vp и нажмите клавишу Tab.
Триггер vp автоматически заменяется на следующий шаблон параметризированного кода.
validates_presence_of :attribute
-
Введите title, :body и нажмите клавишу Enter. Код должен выглядеть следующим образом:
validates_presence_of :title, :body
-
Сохраните файл, вернитесь в обозреватель, щелкните "New post" и затем "Create".
Теперь выводится сообщение о том, что поля заголовка и тела сообщения не могут оставаться пустыми.
Как сделать список более похожим на блог
В этом разделе описано изменение представления index.html для большего соответствия списка типичному блогу, как показано на следующем рисунке.
-
В окне "Projects" разверните узел "Views > posts" и дважды щелкните файл index.html.erb для его открытия в области изменения.
В этом представлении отображается список сообщений в блоге.
-
Удалите элементы <h1> и <table> и замените их следующим кодом, выделенным полужирным шрифтом.
<h1>The Ruby Blog</h1>
<% for post in @posts %>
<h2><%= post.title %></h2>
<p><%= post.body %></p>
<small>
<%= link_to "permalink",
:action => "show",
:id => post %>
</small>
<hr>
<% end %>
<br />
<%= link_to 'New post', new_post_path %>
Для каждого действия post этот код создает заголовок, тело сообщения и ссылку Permalink.
-
Сохраните изменения и запустите приложение для просмотра нового интерфейса модели "Post".
-
Для просмотра блога начиная с последних сообщений измените только что добавленный код и порядок сортировки путем добавления вызова в метод .reverse, как показано ниже.
<% for post in @posts.reverse %>
Сохраните файл и обновите страницу в обозревателе для отображения списка в обратном порядке.
Закрепление материала на практике
При помощи полученных в этом упражнении навыков создайте веб-проект списка задач. Используйте генератор базового интерфейса для создания базового интерфейса на основе модели "Task" с полями title:string и description:text. При помощи Rake создайте базу данных, а затем используйте "Database Migrations" для создания таблицы. Не забудьте изменить файл route.rb для отображения root, а также удалить файл index.html.
Что дальше?
>> Дополнительная документация по Ruby в среде NetBeans
|
|