Простенькое введение в Ruby on Rails - Создание CRUD-приложения |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
В пятницу я разговаривал с одним моим другом и поведал ему о моем опыте работы с Ruby on Rails. Сказать, что это его заинтересовало, значит не сказать ничего. Для меня одним из самых лучших способов обучения всегда было создание чего-либо и поэтому, когда он попросил меня объяснить ему как создается простейшее приложение с использованием Rails, то я немедленно внушил ему, что лучшим способом объяснения будет создание приложения. Так родилась эта статья.
Сейчас я знаю, что Rails может генерировать каркас (scaffolding), который автоматически создает простейшее CRUD-приложение (Create-Read-Update-Delete), но для повышения педагогического эффекта я забуду, что Rails имеет возможность генерировать каркас. Я не буду описывать процесс установки и настройки Вашей среды разработки однако, на представленных ниже ресурсах можно найти всю необходимую информацию, которая сделает этот процесс простым.
* Instant Rails (http://instantrails.rubyforge.org/wiki/wiki.pl) – Наверное самый простой способ начать разработку на Rails.
* Официальный сайт Ruby On Rails (http://rubyonrails.org/download)
* СУБД MySQL (http://www.mysql.com/)
* Aptana Studio (http://www.aptana.com/studio) – После установки не забудьте добавить RadRails-плагин
Когда уже установлена среда разработки и Вы готовы двигаться дальше, то запустите Aptana. В меню выберите File > New > Rails Project (Файл > Новый > Проект Rails). В появившемся диалоговом окне укажите имя Вашего приложения. Для данного урока я буду называть его userdb. Выберите место, где Вы хотите сохранить проект и убедитесь, что отмечен пункт 'Generate Rails application skeleton' (Создать скелет приложения Rails), выберите MySQL из выпадающего списка и версию Rails. Версия Rails зависит от того, что было установлено Вами при формировании Вашей среды разработки. Я буду использовать Rails 2.0.2, но не стесняйтесь использовать более новую версию. Снимите последний флажок, который стартует сервер автоматически, и щелкните на кнопку "Finish" (Конец).
Это первая часть магии Rails. Если Вы раскроете узел нового проекта, то Вы увидите, что Rails была сгенерирована полная структура каталогов, а также некоторые файлы конфигурации, заглушки и так далее.
http://www.opensourcereleasefeed.com/images/article_images/railsintro001.jpg
Наша первая остановка связана с созданием базы данных. Перейдите в директорию config и откройте файл с именем config.yml. В нем Вы увидите, что Rails были созданы конфигурации для трех баз данных: development (разработка), test (тестирование) и production (конечный продукт). Если Вы установили специфичные username (имя пользователя) и password (пароль), чем указанные по-умолчанию во время установки MySQL, то укажите их для базы development.
Нашей следующей задачей является запуск соответствующей Rake-задачи, которая создаст для нас базу данных. Rake по принципу работы похож с утилитами C Make и Java Ant, подробнее узнать о Rake Вы можете здесь: http://en.wikipedia.org/wiki/Rake_(software). Если у Вас до сих пор отсутствует открытая вкладка "Rake Tasks" в Aptana, то Вы можете ее открыть из меню Windows > Show View > Rake Tasks (Окна > Показать представление > Задачи Rake). В раскрывающемся списке выберите db:create и щелкните на кнопку Go. Поскольку мы находимся в режиме разработки (development), то вызов этой задачи создаст базу данных с именем userdb_development.
Для того, чтобы проверить, что Ваша база данных была создана, Вам необходимо подключиться к серверу MySQL. Для этих целей я использую утилиту MySQL Query Browser GUI Tool, которую можно бесплатно скачать с веб-сайта СУБД MySQL (http://dev.mysql.com/downloads/gui-tools/5.0.html). После установки данной утилиты, запустите её и введите следующие настройки:
* Server Host: localhost
* Port: 3306
* Username: yourusername
* Password: yourpass
* Default Schema: userdb_development
Щелкните на кнопку "OK". Если Вы до этого делали все правильно, то запустится графический интерфейс пользователя (GUI) и продемонстрирует нам только что созданную базу данных userdb_development. Теперь нам необходимо создать таблицу в которой мы будем хранить информацию о пользователях. Rails использует файлы миграций, чтобы описывать структуру таблиц базы данных, а затем использует Rake, чтобы создавать таблицы на основе информации из файлов миграций. Однако, Rails еще использует архитектуру модель-представление-контроллер (MVC) и объектно-реляционную проекцию (ORM) для взаимосвязи объектов модели с таблицами базы данных, поэтому нет необходимости явно создавать файлы миграций. Вместо этого мы скажем Rails какая модель нам необходима и Rails создаст для нас не только модель, но и файл-заготовку миграции вместе файлами-заготовками тестов.
Для создания модели необходимо открыть вкладку 'Generators' (Генераторы) и выбрать из выпадающего списка model. В поле parameters введите имя Вашей модели. В нашем случае это будет User (при этом имя созданной таблицы будет users). Если посмотрите на консоль во время выполнения этой задачи, то Вы должны увидеть примерно следующие строки:
exists app/models/
exists app/models/
exists app/models/
create app/models/user.rb
create test/unit/user_test.rb
create test/fixtures/users.yml
create db/migrate
create db/migrate/001_create_users.rb
Если Вы посмотрите на последнюю строку, то увидите, что был сгенерирован файл с именем 001_create_users.rb внутри каталога db/migrate. Нам необходимо отредактировать в этом файле описание столбцов нашей таблицы, поэтому давайте его откроем. Только что созданная заглушка будет выглядеть следующим образом:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.timestamps
end
end
def self.down
drop_table :users
end
end
Rails автоматически добавляет также следующую строку:
t.timestamps
Она предписывает автоматически сгенерировать поля created_at и updated_at для Вашей новой таблицы. Добавьте следующие строки в метод self.up Вашей миграции:
t.column :name, :string
t.column :surname, :string
Эти строки добавляют новые столбцы в Вашу таблицу с именами name и surname типа varchar (зависит от СУБД). Теперь как нам сообщить Rails, что необходимо создать таблицу? Снова использовать утилиту Rake. Перейдите на вкладку "Rake Tasks" (Задачи Rake), в выпадающем списке выберите db:migrate и щелкните на кнопке Go. Когда Rake завершит свою работу, то Вы должны увидеть в следующие строки:
== 1 CreateUsers: migrating ===================================================
-- create_table(:users)
-> 0.8820s
== 1 CreateUsers: migrated (0.8820s) ==========================================
Перейдите в MySQL Query Browser, обновите состояние базы данных (Crtl+F5) и убедитесь, что наша новая таблица была создана со всеми нашими полями плюс Rails было добавлено поле id и сделано первичным ключом Вашей таблицы. Вы также обнаружите другую таблицу, которая была автоматически создана и имеет название schema_info. Таблица schema_info используется как контроллер версий для Вашей базы данных и позволяет сделать откат, аннулировать миграцию и так далее.
http://www.opensourcereleasefeed.com/images/article_images/railsintro002.jpg
Теперь, когда наша база данных создана и у нас есть таблица, в которой мы будем хранить наши данные, мы можем начать работу над интерфейсом нашего приложения. Как я уже упоминал ранее, Rails является инструментарием разработчика, использующим архитектуру MVC (модель, представление, контроллер) и следовательно Rails соглашается с требованиями этой методологии, что упрощает работу с типичными задачами, которые вызывают трудности в других инструментариях разработчика . Следующим шагом является создание нашего контроллера, который будет осуществлять все необходимые действия для выполнения CRUD-операций (создание, чтение, обновление и удаление).
На вкладке "Generators" (Генераторы) выберите пункт "Controller" (Контроллер) из выпадающего списка, проверьте, что выбран переключатель "create" (создать), введите User в поле parameters (параметры) и щелкните на кнопку Go. После запуска скрипта Вы должны увидеть в консоли следующие строки:
exists app/controllers/
exists app/helpers/
create app/views/user
exists test/functional/
create app/controllers/user_controller.rb
create test/functional/user_controller_test.rb
create app/helpers/user_helper.rb
В данный момент для нас очень интересен файл user_controller.rb. Вы также могли обратить внимание, что был создан новый подкаталог user в каталоге views. Он содержит html.erb-файлы представления. Откройте наш файл user_controller.rb и добавьте в него следующие четыре метода-заглушки:
def index
end
def edit
end
def new
end
def remove
end
Далее, внутри каталога views/user следует создать три новых файла c именами index.html.erb, edit.html.erb и new.html.erb. Сделать это проще всего по щелчку правой кнопкой мыши на каталоге views/user и выбрав New > ERB/RHTML File (Новый > Файл ERB/RHTML). При создании файлов таким способом, они уже будут содержать заготовку HTML-страницы. Так как нам не нужны эти заготовки, то следует очистить эти файлы.
Прежде, чем мы может протестировать что либо, нам необходимо добавить какие либо данные на страницы. Во-первых, откроем файл user_controller.rb и добавим в метод index следующие строки:
@content = 'Below is a list of your current contact in your database'
Во-вторых, откроем файл index.html.erb из каталога views/user и добавим в него следующие строки:
<h1>My List Of Contacts</h1>
<%= @content %>
Чтобы протестировать наше приложение, перейдите на вкладку servers в Aptana, выберите в выпадающем списке сервер, который имеет такое же имя как Ваше приложение и щелкните на кнопке Start. Когда статус изменится на "Running", откройте браузер, перейдите по адресу http://localhost:3001/user и приготовьтесь увидеть примерно следующее:
http://www.opensourcereleasefeed.com/images/article_images/railsintro003.gif
Хоть это и не очень заметно, но произошло уже много интересного. Rails был найден сверстанный шаблон и на основании HTTP-запроса вызван метод index, подготовлена переменная @content для файла представления и все это успешно визуализированно. Давайте добавим еще функциональности: немного взаимодействия с базой данных и первое введение в управление потоками. Откройте файл user_controller.rb и добавьте в метод index следующие строки:
@users = User.find(:all)
Примерно сейчас начинает действовать магия Rails. Эта простая строчка программного кода примерно соответствует следующему SQL-запросу:
select * from users;
Теперь в представлении мы хотим показать все наши записи, но есть небольшие проблемы, мы не имеем никаких данных в нашей базе данных, поэтому если мы добавим следующие строчки в наш файл index.html.erb и перезагрузим страницу, то получим неприятную ошибку от Rails.
< % @users.each do |u| %>
<p>< %= u.name + " " + u.surname %></p>
< % end %>
Эта ошибка возникла потому, что наш запрос к базе данных не вернул результата и поэтому переменная @users будет равна nil, а следовательно вызов nil.name будет вызывать ошибку. Управление потоком еще известно как логический оператор для обработки исключений. Добавьте в файл index.html.erb следующие строки:
< % unless @users.empty? %>
< % @ users.each do |u| %>
<p>< %= u.name + " " + u.surname %></p>
< % end %>
< % else %>
<p>No users currently in the database. Add your first user</p>
< % end %>
Теперь давайте разберем подробнее каждую строчку. Сначала мы проверяем является ли переменная @users пустой (то есть содержит nil в качестве значения). Если это не так, то вызываем итератор each от массива @users и последовательно перечисляем все объекты из этого массива. Если же переменная @users пустая, то отображаем сообщение, которое информирует пользователя, что отсутствует соединение с базой данных. Если сейчас обновить в браузере страницу, то Вы увидите сообщение "No users..." (Нет пользователей...). В сообщении также говорится "Add you first contact" (Добавьте свой первый контакт), так что давайте сделаем это. Замените эту строчку на следующую:
< %= link_to 'Add your first user', :controller => 'user', :action => 'new' %>
Когда Вы обновите страницу, то увидите, что этот текст заменился на ссылку, которая указывает на:
http://localhost:3002/user/new
Сейчас нажатие на эту ссылку отправит Вас на пустую страницу, поэтому давайте исправим это. Откройте файл new.html.erb и добавьте в него следующие строки:
<h1>Add A New User</h1>
< % form_for :user do |f| %>
<fieldset>
Original (English): A Simple Introduction To Ruby On Rails - Building A CRUD Application
Translation: © Роман .
