Rails迁移基础 #
一、迁移概述 #
1.1 什么是迁移 #
迁移是Rails管理数据库结构变更的方式,使用Ruby代码描述数据库操作,可以版本化管理数据库结构。
1.2 迁移文件位置 #
text
db/migrate/
├── 20240328000001_create_articles.rb
├── 20240328000002_add_status_to_articles.rb
└── 20240328000003_create_comments.rb
二、创建迁移 #
2.1 使用生成器 #
bash
# 创建空迁移
rails generate migration AddTitleToArticles
# 创建表迁移
rails generate migration CreateArticles title:string body:text
# 添加字段
rails generate migration AddStatusToArticles status:string
# 添加字段带索引
rails generate migration AddEmailToUsers email:string:index
# 删除字段
rails generate migration RemoveTitleFromArticles title:string
# 创建关联
rails generate migration AddUserToArticles user:references
2.2 迁移文件命名 #
| 命名模式 | 生成的迁移 |
|---|---|
| CreateXXX | 创建表 |
| AddXXXToYYY | 添加字段 |
| RemoveXXXFromYYY | 删除字段 |
| AddColumnToTable | 添加列 |
三、迁移方法 #
3.1 创建表 #
ruby
class CreateArticles < ActiveRecord::Migration[7.1]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.string :status, default: 'draft'
t.references :user, null: false, foreign_key: true
t.timestamps
end
add_index :articles, :title
add_index :articles, :status
end
end
3.2 添加字段 #
ruby
class AddStatusToArticles < ActiveRecord::Migration[7.1]
def change
add_column :articles, :status, :string, default: 'draft'
add_column :articles, :published_at, :datetime
add_index :articles, :status
end
end
3.3 删除字段 #
ruby
class RemoveStatusFromArticles < ActiveRecord::Migration[7.1]
def change
remove_column :articles, :status
remove_index :articles, :status
end
end
3.4 修改字段 #
ruby
class ChangeArticlesTitle < ActiveRecord::Migration[7.1]
def change
change_column :articles, :title, :string, limit: 200
change_column_null :articles, :title, false
change_column_default :articles, :status, 'draft'
end
end
四、执行迁移 #
4.1 迁移命令 #
bash
# 执行迁移
rails db:migrate
# 指定版本
rails db:migrate VERSION=20240328000001
# 回滚迁移
rails db:rollback
# 回滚多步
rails db:rollback STEP=3
# 重置数据库
rails db:reset
# 查看迁移状态
rails db:migrate:status
五、总结 #
5.1 核心要点 #
| 要点 | 说明 |
|---|---|
| 创建迁移 | rails generate migration |
| 创建表 | create_table |
| 添加字段 | add_column |
| 执行迁移 | rails db:migrate |
| 回滚迁移 | rails db:rollback |
5.2 下一步 #
现在你已经掌握了迁移基础,接下来让我们学习 迁移高级,深入了解Rails的高级迁移功能!
最后更新:2026-03-28