Определение индексов
Миграции могут (и, наверное, должны) определять для таблицы индексы, пример, однажды вы заметите, что в базе данных приложения скопилось I количество заказов и поиск по имени клиента занимает больше времени, чем го хотелось. Значит, настало время добавить индекс, воспользовавшись м с соответствующим именем — add_index.
Проблемы, связанные с методом rename_table
переименовании таблиц с помощью миграций возникает одна довольно проблема. Например, представим, что в миграции с порядковым номе-i4 создается таблица по имени order_hi stori es, в которую помещаются не-*е данные.
self. up
create_table :order_histories do |t|
t.column :order_id, .-integer, :null => false
t.column :created_at, :timestamp
t.column :notes, :text
end
order = Order.find :first
переименование таблиц
проделанной работы приведет к переименованию переменных нов, то не будет ничего удивительного в том, что время от времени пона-переименовывать и таблицы. На этот случай миграции поддерживают rename_table.
RenameOrderHistories < ActiveRecord::Migration
ве* self.up
rename_table :order_histories, :order_notes
emd
•ef self.down
rename_table :order_notes, :order_histories
Параметры, используемые для создания таблиц
В качестве второго параметра методу create_table можно передать хэш, <жащий ряд необязательных параметров.
Управление таблицами
сих пор мы использовали миграции для манипуляций со столбцами сущест-irx таблиц. Теперь посмотрим, как создавать и удалять сами таблицы.
is CreateOrderHi stories < Acti veRecord : Migration
def self.up
create_table :order_histories do |t|
t.column :order_id, .'integer, :null => false
t.column :created_at, :timestamp
t.column :notes, :text
end
end
def self.down
drop_table :order_histories
end
end
Переименование столбцов
При пересмотре составных элементов кода мы часто изменяем имена перем чтобы придать им более понятное смысловое значение. Миграции Rails пс ют точно так же поступать и с именами столбцов. Например, через неделю i того, как столбец был добавлен к таблице, может созреть решение, что е_« не самое лучшее имя для нового столбца.
Типы столбцов
В третьем параметре метода add_column определен тип столбца базы да В предыдущем примере мы определили, что столбец e_mail будет иметь' : string. Но что это значит? В базах данных вообще-то отсутствует такой столбца, как : s t г i n g.
16.2. Анализ миграций
Нитрации являются подклассом Rails-класса Acti veRecord: : Migration. Созданный вами класс должен содержать как минимум два метода класса: up и down.
class SomeMeaningfulname < ActiveRecord:Migration
def self.up # . . .
end
def self.down # ...
end
Запуск миграций
Миграции запускаются с помощью Rake-задачи db:migrate.
depot> rake db:migrate
Чтобы посмотреть, что будет дальше, поглубже заглянем во внутренности Код миграции обслуживает таблицу под названием schema_i nf о, которая ся в каждой базе данных Rails. Эта таблица состоит всего лишь из одного
16.1. Создание и применение миграций
Миграции — это простые файлы, находящиеся в каталоге db/migrate, в к содержится код Ruby. По умолчанию имя каждого файла миграции нач с трех цифр и знака подчеркивания. Эти цифры являются для миграций выми, поскольку они определяют порядок, в котором миграции применя для каждой миграции они являются индивидуальным номером версии.