Миграции — это система контроля версий для базы данных, позволяющая изменять схему БД последовательно и согласованно.
Миграция — это Ruby-класс, описывающий набор изменений в структуре базы данных:
rails generate migration AddTitleToArticles title:string
Создает файл в db/migrate/YYYYMMDDHHMMSS_add_title_to_articles.rb
class AddTitleToArticles < ActiveRecord::Migration[7.0]
def change
add_column :articles, :title, :string
end
end
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps # Добавляет created_at и updated_at
end
add_column :articles, :author, :string
remove_column :articles, :old_column
rename_column :articles, :old_name, :new_name
change_column :articles, :views, :integer, default: 0
add_index :articles, :title
add_foreign_key :articles, :users
remove_index :articles, :title
execute "ALTER TABLE articles ADD COLUMN status VARCHAR(30)"
rails db:migrate
Выполняет все невыполненные миграции
rails db:rollback
Откатывает последнюю миграцию
rails db:migrate:status
rails db:reset
Удаляет базу, создает заново и заполняет seeds
add_column :articles, :featured, :boolean unless column_exists?(:articles, :featured)
def change
safety_assured { remove_column :articles, :old_column }
end
class AddDefaultStatus < ActiveRecord::Migration[7.0]
def up
add_column :articles, :status, :string, default: 'draft'
Article.update_all(status: 'published')
end
def down
remove_column :articles, :status
end
end
После выполнения миграций Rails обновляет db/schema.rb
- текущее состояние схемы БД.
Важно: Не редактируйте этот файл вручную!
Резюмируем: миграции в Rails - это мощный инструмент для эволюционного изменения структуры базы данных, позволяющий легко применять и откатывать изменения, работать в команде и поддерживать согласованность между средой разработки и production.