0Pricing
Ruby Academy · Урок

Миграции

Развивайте схему базы данных

«Миграции» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы Active Record
  2. Миграции
  3. Связи
  4. Проверки и запросы
← Назад к Ruby Academy