Ruby on Rails и базы данных, Миграции - Разработка модуля для хранения и управления документами в электронном виде

Среда Rails поддерживает работу с большинством современных баз данных, таких как MySQL, SQLite, PostgreSQL. Для этого используются различные адаптеры, встроенные в среду Rails и определяемые в конфигурационном файле config/database. yml. Адаптеры позволяют ActiveRecord формировать различные запросы в зависимости от используемой БД, но формируемые одним и тем же объектно-ориентированным кодом.

Миграции

Для удобной манипуляции со структурой базы данных без использования SQL, а также для хранения истории изменения струкруты БД в процессе разработки (и особенно последующей доработки) приложения модуль ActiveRecord фреймворка Ruby on Rails предоставляет систему миграций.

Миграция представляет собой определенный набор действий, производимых над базой данных. Чаще всего миграция создает таблицу, либо изменяет существующие.

Пример консольной команды для создания миграции:

>ralils generate migration create_employees

При этом в каталоге db/migrate будет создан файл с именем

20130315000001_create_employees. rb

В начале имени файла включается префикс метки времени создания миграции с точностью до секунды. Это позволяет системе и пользователю знать порядок добавления миграций в систему.

Миграция представляет собой файл с кодом на языке Ruby, имплементирующий подкласс класса ActiveRecord::Migration. В классе могут быть переопределены следующие методы:

    1) up() -- выполняется при запуске миграции; 2) down() -- выполняется при отмене (rollback) миграции; 3) change() -- выполняется при запуске миграции, не нуждается в классе down(), последовательность действий для отмены миграции определяется ActiveRecord автоматически, исходя из действий, описанных в change().

Основные команды для запуска созданной миграции:

    1) > rake db:migrate -- запускает очередь миграций на выполнение; 2) > rake db:rollback -- отменяет последнюю выполненную миграцию.

Исходный код миграции, созданной выше, может быть таким:

Class CreateEmployees < ActiveRecord::Migration
Def change
Create_table :employees do |t|
T. integer :age
T. string :first_name
T. string :last_name
End
End
End

В коде переопределяется метод change базового класса. В нем вызывается метод create_table(), которому передается название таблицы и блок, в котором вызываются методы, определяющие типы данных полей. Этим методам передаются соответствующие названия создаваемых полей. Метод create_table создает в таблицу и вызывает блок, в котором происходит создание полей таблицы. В результате генерируется SQL запрос следующего вида:

CREATE TABLE 'employees' ('id' int(11) DEFAULT NULL auto_increment PRIMARY KEY, 'age' int(11), 'first_name' varchar(255), 'last_name' varchar(255)) ENGINE=InnoDB

Как видно из запроса, фреймворк по соглашению автоматически создает поле id, т. к. оно необходимо в большинстве случаев. Чтобы переопределить данное поведение, необходимо добавить опцию ":id => false" в вызов метода create_table().

Похожие статьи




Ruby on Rails и базы данных, Миграции - Разработка модуля для хранения и управления документами в электронном виде

Предыдущая | Следующая