0Pricing
Ruby Academy · 课时

迁移

演进数据库模式

迁移 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Active Record 基础
  2. 迁移
  3. 关联
  4. 验证与查询
← 返回 Ruby Academy