corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Создание блога на Ruby за 10 минут

Составитель Брайан Леонард (Brian Leonard), редактор Крис Катлер (Chris Kutler)
Апрель 2008 г.
[номер версии: V6.1-1]

В данном руководстве рассматривается создание и выполнение простого веб-приложения для работы с базой данных с поддержкой Ruby в среде IDE NetBeans. Выполнение действий, приведенных в этом руководстве, позволяет ознакомиться с решением следующих задач:

  • использование задач Rake и файлов переноса для создания и обновления таблиц базы данных;
  • использование генератора базового интерфейса для создания базового веб-приложения, позволяющего создавать, читать, обновлять и удалять базу данных;
  • изменение представлений для точной настройки веб-страниц.

Содержание

Содержимое на этой странице относится к среде IDE NetBeans 6.1

Для работы с этим руководством требуется следующее программное обеспечение.

Программное обеспечение или ресурс Требуемая версия
Среда IDE NetBeans с поддержкой Ruby Версия 6.1
Сервер базы данных MySQL Версия 5.0

Создание проекта Ruby on Rails

Начнем с создания проекта Ruby on Rails. По умолчанию приложение создается в структуре каталогов, соответствующей правилам проекта Ruby on Rails для приложений.

  1. Выберите в среде IDE NetBeans "File > New Project".

  2. Выберите Ruby в списке "Categories" и "Ruby on Rails Application" в списке "Projects", как показано на следующем рисунке.

    Выбор типа проекта Ruby on Rails в мастере создания проекта
  3. Нажмите кнопку "Next" для определения имени проекта и его местоположения.
  4. Введите rubyweblog в текстовом поле "Project Name", как показано на следующем рисунке.

    В остальных полях этой страницы примите установки по умолчанию.

    Установка значения "rubyweblog" в поле "Project Name" в действии "Name and Location"
  5. Если выполняются следующие условия, перейдите к действию 8:

    • используется имя пользователя root, установленное по умолчанию;
    • имя пользователя root не требует ввода пароля;
    • используется сервер базы данных MySQL.

    В среде IDE эти условия предполагаются как условия по умолчанию.

  6. Для настройки доступа к базе данных нажмите кнопку "Next".

  7. Выберите пункт меню "Specify Database Information Directly", выберите "Database Adapter" и заполните поля "User Name" и "Password". Оставьте поле "Database Name" пустым.

  8. Нажмите кнопку "Finish" для создания нового проекта.

    В среде IDE создается каталог проекта с тем же именем, что и проект, и в области изменения открывается файл с именем database.yml. Обратите внимание на то, что именем базы данных по умолчанию для настройки разработки является rubyweblog_development.

  9. Проверьте правильность адаптера раздела разработки, базы данных, имени пользователя и параметров пароля, затем нажмите небольшую кнопку x на вкладке database.yml для закрытия файла.

    Изображение файла database.yml

Создание базового интерфейса

Это приложение блога основано на модели "Post", посредством которой происходит сохранение сообщений блога. Здесь используется генератор базового интерфейса "Rails" для создания модели и ее контроллера, а также представления индекса (списка), демонстрации, изменения и новых представлений.

С помощью генератора также создается файл переноса для создания таблицы базы данных модели, а также модульный тест и модули-заглушки для записи тестов модели.

  1. В окне "Projects" щелкните правой кнопкой мыши узел проекта "rubyweblog" и выберите "Generate", как показано на следующем рисунке.

    Выбор действия "Generate" в контекстном меню
  2. В диалоговом окне "Rails Generator" выберите "scaffold" в раскрывающемся списке "Generate", как показано на следующем рисунке.

    Выбор "scaffold" в раскрывающемся списке "Generate"
  3. Введите Post в текстовом поле "Model Name".

  4. Введите title:string в текстовом поле "Attribute Pairs" и нажмите кнопку "OK".

    В окне "Output" отображаются файлы, которые создаются и обновляются генератором базового интерфейса.

Создание базы данных

Этот раздел посвящен использованию задачи Rake для создания базы данных "rubyweblog_development". Файл переноса 001_create_posts.rb используется для добавления в базу данных таблицы сообщений в блоге.

  1. В окне "Projects" щелкните правой кнопкой мыши узел проекта "rubyweblog" и выберите "Run Rake Task > db > create" в контекстном меню.

    Выбор "create" в контекстном меню

    Задача Rake создает базу данных для варианта настройки разработки согласно определению в файле database.yml.

    Примечание: При появлении в окне "Output" сообщений об ошибках проверьте правильность имени пользователя и пароля в разделе разработки файла database.yml. Также убедитесь в том, что сервер базы данных запущен.

  2. В окне "Projects" разверните "Database Migrations" и "migrate".

  3. Для открытия файла в области изменения дважды щелкните узел "001_create_posts.rb", как показано на следующем рисунке.

    Двойной щелчок узла "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 в таблицу базы данных.

  4. В окне "Projects" щелкните правой кнопкой мыши узел "rubyweblog" и выберите "Migrate Database > To Current Version", как показано на следующем рисунке.

    Перенос базы данных

    В результате этого действия в базу данных добавляется таблица "posts". В окне "Output" отображается ход процесса переноса, как показано на следующем рисунке.

    Сообщения процесса переноса в окне "Output"

Выполнение приложения

Теперь протестируйте приложение.

  1. В окне "Projects" разверните узел "Configuration" и дважды щелкните routes.rb для его открытия в редакторе.

  2. Найдите следующий комментарий.

    # map.root :controller => "welcome"
  3. Раскомментируйте строку и измените значение контроллера на "posts", как показано ниже.

    map.root :controller => "posts"
  4. В окне "Projects" разверните узел "Public", щелкните правой кнопкой мыши index.html и выберите "Delete" в контекстном меню.

    На странице index.html по умолчанию отображается страница приветствия, которая сейчас не требуется. После удаления index.html Rails обращается к routes.rb для выбора отображаемой страницы.

  5. Выберите "File > Save All" в главном меню.

  6. Нажмите кнопку "Run Main Project" на панели инструментов.

    Кнопка "Run Main Project"

    После выполнения этого действия запускается сервер WEBrick, который является веб-сервером (на Ruby), предоставляемым как часть платформы Ruby on Rails; при этом в обозревателе отображается следующая страница.

    Страница в веб-обозревателе

    Примечание: Проект может быть настроен для использования на другом сервере. При использовании сервера, отличного от WEBrick, может потребоваться ввести http://localhost:3000/posts в адресную строку обозревателя и нажать клавишу Enter.

  7. Щелкните ссылку "New post" для отображения второй страницы приложения, как показано на следующем рисунке.

    Вторая страница приложения в обозревателе
  8. Введите заголовок и нажмите кнопку "Create".

    На следующем рисунке показан пример сообщения в блоге.

    Пример сообщения в блоге
  9. Для возврата к списку сообщений в блоге щелкните ссылку "Back".

Добавление столбца таблицы

В этом разделе описано добавление столбца body в таблицу сообщений в блоге для сохранения текста каждой записи в блоге.

  1. Щелкните правой кнопкой мыши узел "Database Migrations" и выберите "Generate" в контекстном меню.

    Выбор "Generate" в контекстном меню

    Откроется диалоговое окно "Rails Generator" с переносом, выбранным в раскрывающемся списке "Generate".

  2. Введите AddBodyToPost body:text в текстовом поле "Arguments", как показано на следующем рисунке.

    Диалоговое окно "Generate Migration"
  3. Нажмите кнопку "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
  4. Щелкните правой кнопкой мыши узел "rubyweblog" и выберите "Migrate Database > To Current Version" в контекстном меню.

    Либо щелкните правой кнопкой мыши исходный файл и выберите "Run" в появившемся меню.

  5. В окне "Projects" разверните узел "Views", узел "Posts" и дважды щелкните файл edit.html.erb для его открытия в области изменения.

  6. Добавьте операторы, выделенные полужирным шрифтом в следующем примере кода, в файл 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 %>
  7. Дважды щелкните файл new.html.erb для его открытия в области изменения.

  8. Добавьте операторы, выделенные полужирным шрифтом в следующем примере кода, в файл 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 %>
  9. Дважды щелкните файл show.html.erb для его открытия в области изменения.

  10. Добавьте операторы, выделенные полужирным шрифтом в следующем примере кода, в файл 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 %>
  11. Выберите "File > Save All" в главном меню.

  12. Вернитесь в обозреватель и щелкните ссылку "New Post" для вывода нового столбца body, как показано на следующем рисунке.

    Новое сообщение в блоге со столбцом "Body"
  13. Создайте еще несколько сообщений блога.

    После выполнения этих действий нажмите кнопку "Back" для возврата на страницу "Listing posts".

Подтверждение правильности ввода

В этом разделе к классу Post добавляется код, обеспечивающий ввод пользователем данных в полях заголовка и тела сообщения.

  1. В окне "Projects" разверните узел "Models" и дважды щелкните файл post.rb для его открытия в редакторе.

  2. Вставьте строку в определении класса, введите vp и нажмите клавишу Tab.

    Триггер vp автоматически заменяется на следующий шаблон параметризированного кода.
    validates_presence_of :attribute
  3. Введите title, :body и нажмите клавишу Enter. Код должен выглядеть следующим образом:

    validates_presence_of :title, :body
  4. Сохраните файл, вернитесь в обозреватель, щелкните "New post" и затем "Create".

    Теперь выводится сообщение о том, что поля заголовка и тела сообщения не могут оставаться пустыми.

    Вывод сообщений об ошибках из-за отсутствия заголовка и тела сообщения

Как сделать список более похожим на блог

В этом разделе описано изменение представления index.html для большего соответствия списка типичному блогу, как показано на следующем рисунке.

Измененная страница блога
  1. В окне "Projects" разверните узел "Views > posts" и дважды щелкните файл index.html.erb для его открытия в области изменения.

    В этом представлении отображается список сообщений в блоге.

  2. Удалите элементы <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.

  3. Сохраните изменения и запустите приложение для просмотра нового интерфейса модели "Post".

  4. Для просмотра блога начиная с последних сообщений измените только что добавленный код и порядок сортировки путем добавления вызова в метод .reverse, как показано ниже.

    <% for post in @posts.reverse %>
  5. Сохраните файл и обновите страницу в обозревателе для отображения списка в обратном порядке.

Закрепление материала на практике

При помощи полученных в этом упражнении навыков создайте веб-проект списка задач. Используйте генератор базового интерфейса для создания базового интерфейса на основе модели "Task" с полями title:string и description:text. При помощи Rake создайте базу данных, а затем используйте "Database Migrations" для создания таблицы. Не забудьте изменить файл route.rb для отображения root, а также удалить файл index.html.

Что дальше?



>> Дополнительная документация по Ruby в среде NetBeans


Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems