Простенькое введение в Ruby on Rails - Создание CRUD-приложения

Schalk Neethling, “A Simple Introduction To Ruby On Rails - Building A CRUD Application”, public translation into Russian from English More about this translation.

Translate into another language.

В пятницу я разговаривал с одним моим другом и поведал ему о моем опыте работы с 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>

Pages: ← previous Ctrl next
1 2

Original (English): A Simple Introduction To Ruby On Rails - Building A CRUD Application

Translation: © Роман .

translated.by crowd

Like this translation? Share it or bookmark!