Миграции
Развивайте схему базы данных
«Миграции» — бесплатный урок Ruby Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Что такое миграция
Миграция — это версионируемый файл Ruby, описывающий изменение схемы базы данных, например создание таблицы или добавление столбца.
- Миграции являются кодом, поэтому хранятся в системе контроля версий.
- Все участники команды применяют одни и те же изменения в одном и том же порядке.
- Никогда не изменяйте базу данных вручную.
Создание миграции
Rails создаёт файлы миграций за Вас. Например, команда rails generate migration CreateUsers создаёт файл с отметкой времени в каталоге db/migrate/. Отметка времени определяет порядок выполнения миграций.
Создание таблицы
Миграция определяет метод change. create_table создаёт таблицу, а t.timestamps автоматически добавляет created_at и updated_at.
class CreateUsers < ActiveRecord::Migration[7.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
endТипы столбцов
Распространённые типы столбцов сопоставляются с типами базы данных:
string— короткий текст.text— длинный текст.integer,float,decimal— числа.boolean— значение true или false.datetime,date— значения времени.
create_table :products do |t|
t.string :title
t.text :description
t.decimal :price
t.boolean :active
t.timestamps
endВыполнение миграций
rails db:migrate применяет все ожидающие миграции и обновляет schema.rb. Rails записывает выполненные миграции в таблицу schema_migrations, поэтому каждая из них выполняется только один раз.
Добавление столбца
Чтобы расширить существующую таблицу, создайте миграцию и используйте add_column. Необходимо указать таблицу, имя столбца, тип и параметры.
class AddAgeToUsers < ActiveRecord::Migration[7.1]
def change
add_column :users, :age, :integer, default: 0
end
endОткат изменений
rails db:rollback отменяет последнюю миграцию. Rails автоматически обращает метод change в обратную сторону, если операции допускают обратное выполнение, например add_column или create_table.
Необратимые изменения
Некоторые операции нельзя обратить автоматически, например выполнение необработанного SQL или удаление столбца, содержащего данные. Для таких операций определите явные методы up и down, чтобы Rails знал, как отменить изменение.
class ChangeData < ActiveRecord::Migration[7.1]
def up
execute "UPDATE users SET active = TRUE"
end
def down
execute "UPDATE users SET active = FALSE"
end
endИндексы
Добавьте индекс, чтобы ускорить поиск по столбцу, который часто используется в запросах, например по внешнему ключу или адресу электронной почты для входа. Используйте unique: true, чтобы также обеспечить уникальность на уровне базы данных.
class AddIndexToUsersEmail < ActiveRecord::Migration[7.1]
def change
add_index :users, :email, unique: true
end
endМиграции и schema.rb
Миграции — это история изменений, а schema.rb — текущий снимок. Новые разработчики могут выполнить rails db:schema:load, чтобы мгновенно создать базу данных по этому снимку, не воспроизводя каждую миграцию.
Рекомендации
Делайте миграции безопасными:
- Никогда не изменяйте миграцию, уже выполненную в общей среде; создайте новую.
- Каждая миграция должна быть посвящена одному изменению.
- Добавляйте ограничения на уровне базы данных (null: false, индексы) для обеспечения целостности.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли миграции.
Итоги: миграции
Вы научились безопасно развивать схему:
- Миграции — это версионируемые изменения схемы, сохранённые в системе контроля версий.
create_table,add_columnиadd_indexформируют структуру таблиц.db:migrateприменяет изменения, аdb:rollbackотменяет их.- Используйте
up/downдля необратимых изменений. schema.rbсодержит текущий снимок схемы.
Далее Вы свяжете модели друг с другом с помощью ассоциаций.
Часто задаваемые вопросы
Урок «Миграции» бесплатный?
Да — полный текст урока «Миграции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Миграции»?
Развивайте схему базы данных Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Миграции»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.