Управление миграциями
миграций этот вопрос представляется далеко не в самом выгодном свете. 1 временем определения вашей схемы данных будут разбросаны по отдельным дюнным файлам, многие из которых потенциально способны воздейство-. на определения каждой таблицы в вашей схеме.
16.7. Манипуляции со схемой данных вне миграций
Все рассмотренные до сих пор в этой главе миграционные методы доступны i же и как методы в объектах подключений Active Record, а следовательно, до ны в моделях, представлениях и контроллерах Rails-приложений.
16.6. В чем заключаются слабые стороны миграций
Миграции страдают от одной серьезной проблемы. Лежащие в их основе DDL-операторы, обновляющие схему базы данных, не обладают свойствами транзак¬ции. Rails здесь ни при чем — большинство баз данных просто не поддерживают откаты create table, alter table и других DDL-инструкций.
Расширенные миграции
Миграция, предназначенная для таблицы записей товаров (line i tem) из дущего раздела, может удивить дубликатами фрагментов оператора execute, верное, было бы лучше вынести создание ограничений внешнего ключа в о ный вспомогательный метод.
Это можно сделать, добавив к исходному файлу миграции следующий
Усовершенствованные миграции
class CreateLineltems < ActiveRecord::Migration
def self.up
create_table :line_items do |t|
t.column :product_id, :integer, tnull => false t.column :order_id, :integer, :null => false t.column :quantity, :integer, :null => false t.column :total_price, -.decimal, :null => false, :precision => 8, :scale => 2
end
execute "alter table tine_items
add constraint fk_line_item_products
foreign key (product_id) references products(id)"
execute "alter table line_items
add constraint fk_line_item_orders
foreign key (order_id) references orders(id)"
end
def self.down
видение данных с помощью миграции
изменения в схеме влекут за собой перемещения данных. Например, в на проекта могла быть схема, в которой цена хранилась в виде числа с плаваю-i запятой. Но позже, после столкновения с проблемой округления, возникло
Загрузка данных из стендов
Стенды обычно содержат данные, используемые при запуске тестов. Тем не ме¬нее после незначительной доработки мы можем использовать их и для загрузки данных в процессе выполнения миграции. Для иллюстрации процесса предполо¬жим, что в базе данных имеется только что созданная таблица users.
Загрузка данных с помощью миграций
Даже в процессе разработки для всесторонней проверки работоспособности i шинство приложений требуют загрузки в базу значительного объема да ходной информации. Скажем, если создается интернет-магазин, то нужнщ ные о товарах.
16.4. Миграции данных
Миграции представляют собой обыкновенный Ruby-код, поэтому с ними: делать все, что угодно. Но поскольку их код также относится и к Rails, то i тупен весь код, имеющийся в приложении на данный момент. В частности»!
Таблицы без первичных ключей
Иногда может возникнуть потребность в создании таблицы без первичного i ча. В Rails чаще всего это нужно для объединительных таблиц, содержащих!