迁移
演进数据库模式
迁移 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 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:真或假。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 会撤销上一次迁移。当操作可以逆转时(例如 add_column 或 create_table),Rails 会自动逆转 change 方法。
不可逆的更改
有些操作无法自动逆转,例如运行原始 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是当前快照。
接下来,我们将使用关联连接模型。
常见问题解答
「迁移」课时是免费的吗?
是的 — 「迁移」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「迁移」这节课中我会学到什么?
演进数据库模式 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「迁移」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。