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