corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Использование Ajax при помощи Ruby on Rails

Составитель Брайан Леонард (Brian Leonard), редактор Натали Джереми (Natalie Jeremy)
Февраль 2008 г.
[номер версии: V6.0-7]

В данном руководстве рассматривается добавление поддержки Ajax к проекту Ruby on Rails в среде NetBeans. На примере демонстрируется динамическое добавление комментариев в блог.

Содержание

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

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

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

* Настоящее руководство, написанное для Rails 1.2.5, задействует функцию создания базового интерфейса. Поскольку в Rails 2.0 создание базового интерфейса не поддерживается, следовать указаниям этого руководства при использовании Rails 2.0 невозможно.

Создание демонстрационной базы данных

Настоящее руководство основывается на руководстве Формирование связей между моделями Rails. По завершении работы с этим руководством можно запустить проект, созданный в ходе изучения, и перейти к следующему разделу. В противном случае загрузите файл RubyWebLogModel.zip и следуйте указаниям по созданию демонстрационной базы данных.

Примечание: В настоящем руководстве используется сервер базы данных MySQL. Сведения об использовании сервера базы данных MySQL в приложении на Ruby приведены в статье Установка и настройка поддержки Ruby. В этой статье также описывается использование сервера базы данных Java DB вместо MySQL.

  1. Откройте окно ввода команд.
  2. Запустите сервер базы данных MySQL, если он еще не запущен.
  3. Введите следующую команду для создания базы данных разработки и нажмите клавишу Enter.

    mysqladmin -u root -p create rubyweblog_development

    Примечание: Если пароль для пользователя root не установлен, опустите аргумент -p.

  4. Откройте проект "rubyweblog" в среде IDE.

    Примечание: При первом создании или открытии проекта Ruby в среде IDE производится проверка на наличие других установленных версий Ruby кроме пакета JRuby, входящего в комплект поставки. Если такие версии установлены, на экран выводится диалоговое окно для выбора программного обеспечения, которое будет использоваться. Если требуется использовать встроенный интерпретатор JRuby, выберите "JRuby"; при необходимости использования собственной установленной версии Ruby выберите эту версию. Дополнительные сведения приведены в разделе Настройка среды IDE для использования собственной установленной версии Ruby в руководстве "Установка и настройка Ruby".

  5. Если для работы с базой данных требуется пароль, внесите изменения в файл database.yml и укажите пароль (password) в настройках разработки. Сохраните файл.

    Для быстрого доступа к файлу database.yml нажмите комбинацию клавиш Alt+Shift+O (Ctrl+Shift+O для компьютеров Макинтош), введите database.yml в текстовом поле "File Name" и нажмите клавишу Enter.
  6. Щелкните правой кнопкой мыши узел "rubyweblog" и выберите "Migrate Database > To Current Version".

    Это действие приводит к добавлению таблиц сообщений и комментариев в базу данных. Ход процесса переноса отображается в окне "Output".
  7. Запустите приложение и создайте новое сообщение.
  8. Щелкните ссылку "Permalink" и добавьте к сообщению комментарий.

    Обратите внимание, что после добавления комментария вся страница перезагружается.

Создание частичного шаблона

В настоящее время в проекте "rubyweblog" после каждого добавления комментария на страницу происходит перезагрузка как сообщения блога, так и комментариев к нему. Поэтому рекомендуется загружать комментарии динамически, с использованием поддержки Ajax, имеющейся в платформе Ruby on Rails. Для подготовки к использованию Ajax создается частичный шаблон, в котором хранится код просмотра комментариев. Преимущество использования частичного шаблона состоит в том, что его можно вызывать многократно (для каждого комментария в блоге) без визуализации самого сообщения блога.

  1. Щелкните правой кнопкой мыши узел "rubyweblog" и выберите "New > RHTML file". Присвойте файлу имя _comment и поместите его в папку app\views\blog.

    В результате создается файл _comment, который открывается в области изменения. Обратите внимание, что имя частичного шаблона начинается со знака подчеркивания (_), что отличает этот шаблон от полных шаблонов.

    В настоящее время код для отображения комментариев находится в файле show.rhtml. На следующем этапе этот код удаляется из show.rhtml и вставляется в частичный шаблон _comment.rhtml.
  2. Выберите "rubyweblog > Views > blog folder" и откройте файл show.rhtml. Скопируйте код для отображения комментариев (см. пример кода 1). Вставьте этот код в _comment.rhtml вместо всего текущего содержимого файла.

    <li><%= h comment.comment %><br>
      <div style="color: #999; font-size: 8pt">
       Posted on <%= comment.created_at.strftime("%B %d, %Y at %I:%M %p") %>
      </div>
    </li>
    
    
  3. Перейдите обратно к файлу show.rhtml и удалите следующие две строки.

    <% @post_comments.each do |comment| %>
    
    <% end %>
    
  4. Вставьте элемент <div>, выделенный полужирным шрифтом в следующем примере кода. Вставьте код на место удаленных двух строк.
    <hr>
    <h4>Comments</h4>
    
    <ul>
      <div id="comments">
        <% @post_comments.each do |comment| %>
            <%= render :partial=>"comment", :object => comment %>
        <% end %>
      </div>
    </ul>
    
    Этот код служит для создания элемента <div> с именем "comments". В переменной @post_comments содержатся комментарии, выводимые с помощью частичного шаблона _comment.
  5. Выберите "File > Save All", затем запустите приложение.

  6. Щелкните ссылку "Permalink" и добавьте к сообщению комментарий.

    С этого момента приложение работает так же, как раньше. Однако теперь в него добавлена поддержка Ajax.

Добавление поддержки Ajax

Первым действием по добавлению поддержки Ajax к проекту является добавление библиотек JavaScript Prototype и script.aculo.us. Эти библиотеки поставляются вместе с Ruby on Rails. Библиотека Prototype обеспечивает основу для реализации Ajax в Ruby on Rails, в то время как библиотека script.aculo.us предоставляет визуальные эффекты, которые можно добавлять в приложение.

  1. Выберите "Views > layouts" и откройте файл blog.rhtml.
  2. Добавьте следующую строку кода под строкой, содержащей stylesheet_link_tag:

      <%= javascript_include_tag :defaults %>
                

    Этот код служит для добавления библиотек JavaScript Prototype и script.aculo.us, поставляемых с Ruby on Rails. Затем необходимо создать form_remote_tag для инициирования действия Ajax.

  3. Откройте файл show.rhtml. Удалите существующий form_tag, выполняющий HTTP POST, и замените его следующим form_remote_tag, выполняющим XMLHTTPRequest.
      <% form_remote_tag :url => {:action => "post_comment"} do %>
                
    Этот код инициирует действие Ajax для действия post_comment в файле blog.controller.rb. Пока что после добавления комментария по-прежнему перезагружается вся страница. Если используется form_remote_ tag , и добавлены библиотеки JavaScript, передача данных со страницы методом POST более не производится. Вместо этого теперь осуществляется поиск JavaScript для выполнения; но этот код еще не написан. При принудительном обновлении страницы, однако, можно убедиться в том, что комментарии добавлены.
  4. Разверните узел "Controllers" и откройте файл blog_controller.rb.
  5. Выполните прокрутку до действия post_comment и замените существующий вызов метода redirect_to следующим кодом.

    render :update do |page|
      page.insert_html :bottom, 'comments', :partial => 'comment'
      page[:comment_comment].clear
      flash.keep(:post_id)
    end 
    Код, приведенный выше, служит для динамической вставки частичного шаблона _comment.rhtml в нижнюю часть тега <div> комментариев. Важно сохранять post_id во флэш; в противном случае дополнительные комментарии, вставляемые пользователем, будут обладать нулевым post_id и, таким образом, станут "висячими" (в таблице комментариев не определена ссылочная целостность).
  6. Запустите проект и убедитесь в том, что комментарии обновляются динамически.

Дополнительно: Применение визуальных эффектов

Библиотека script.aculo.us, ранее добавленная в проект, предоставляет визуальные эффекты, которые можно использовать для совершенствования внешнего вида и удобства приложения. Воспользуемся одним из эффектов для подсветки последнего комментария в блоге. Опыт применения этого эффекта можно перенести на другие эффекты в библиотеке script.aculo.us.

  1. Откройте файл _comment.rhtml и добавьте в существующий тег <li> следующее свойство "id", выделенное полужирным шрифтом.

    <li id=<%= "comment_#{comment.id}" %>>
    
    Эта строка кода служит для маркировки комментария, к которому требуется применить визуальный эффект.
  2. Перейдите к файлу blog_controller.rb и добавьте следующий код в конец блока render :update.

     page["comment_#{@comment.id}"].visual_effect :highlight, :duration => 3.5
      
  3. Выберите "File > Save All", затем обновите данные в обозревателе (это требуется для создания и передачи в обозреватель кода JavaScript, обрабатывающего визуальный эффект). Добавьте комментарий и обратите внимание на кратковременную подсветку нового комментария.

    Модель комментариев с подсветкой

Что дальше?

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


Bookmark this page

del.icio.us furl simpy slashdot technorati digg
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