Active Record 基础
ORM 基础
Active Record 基础 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
什么是 Active Record
Active Record 是 Rails 的 ORM(对象关系映射)层。它将 Ruby 对象连接到数据库表中的行,让您可以使用对象,而不是直接编写结构化查询语言。
- 类映射到表。
- 实例映射到行。
- 属性映射到列。
定义模型
模型是一个继承自 ApplicationRecord(而 ApplicationRecord 又继承自 ActiveRecord::Base)的类。按照约定,User 模型会自动映射到 users 表。
class User < ApplicationRecord
end
# Maps to the 'users' table
# Columns become attributes automatically约定优于配置
Active Record 使用命名约定,让您少写一些设置:
- 类名使用单数形式和 CamelCase:
User。 - 表名使用复数形式和蛇形命名法:
users。 - 默认主键是
id。
遵循这些约定后,大多数连接工作都会自动完成。
创建记录
使用 create 创建行,或者先构建对象,再使用 save。create 会在一次调用中完成实例化和保存。
user = User.create(name: "Ada", email: "ada@example.com")
# Or in two steps:
other = User.new(name: "Linus")
other.email = "linus@example.com"
other.save读取记录
使用查找方法获取记录:
- 通过主键使用
User.find(1)(找不到时会引发错误)。 - 通过任意列使用
User.find_by(email: 'a@b.com')(找不到时返回 nil)。 - 使用
User.all获取所有行。 - 使用
User.first和User.last。
user = User.find(1)
admin = User.find_by(role: "admin")
everyone = User.all更新记录
修改属性后使用 save,或者使用 update 同时赋值并保存。update 会根据验证结果返回 true 或 false。
user = User.find(1)
user.update(name: "Ada Lovelace")
# Equivalent two-step form:
user.name = "Ada Lovelace"
user.save删除记录
使用 destroy 移除行(会运行回调并处理关联),或使用 delete(直接执行 SQL,不运行回调)。除非您有理由绕过回调,否则应优先使用 destroy。
user = User.find(1)
user.destroy
# Bulk destroy:
User.where(active: false).destroy_all属性与脏数据跟踪
Active Record 会跟踪尚未保存的更改。在保存之前,changed?、changes 和 name_was 等方法可以告诉您哪些数据已更改。这在回调和日志记录中很有用。
user = User.find(1)
user.name = "New Name"
puts user.changed? # true
puts user.name_was # old value
puts user.changes.inspectschema.rb 文件
Active Record 从数据库读取表结构,而不是从模型读取。当前结构会反映在 db/schema.rb 中,该文件由迁移生成。您很少需要手动编辑它。
SQL 到哪里去了
Active Record 会在后台将您调用的方法转换成 SQL。User.find(1) 会变成 SELECT * FROM users WHERE id = 1 LIMIT 1。您可以使用 User.where(active: true).to_sql 查看生成的 SQL。
sql = User.where(active: true).to_sql
# => SELECT "users".* FROM "users" WHERE "users"."active" = TRUEORM 有什么帮助
Active Record 为您提供:
- 与数据库无关的代码(PostgreSQL、MySQL 和轻量级嵌入式数据库)。
- 通过参数化查询防止 SQL 注入。
- 可读的面向对象数据访问方式。
只有在特殊情况下,您才需要改用原始 SQL。
快速检查
测试您对 Active Record 基础知识的理解。
回顾:Active Record 基础
您学习了 ORM 的基础知识:
- 类映射到表,实例映射到行。
- 约定优于配置负责处理命名。
- CRUD:
create、find/find_by、update、destroy。 - 脏数据跟踪会显示尚未保存的更改。
- Active Record 会为您生成安全的 SQL。
接下来,我们将使用迁移管理数据库结构。
常见问题解答
「Active Record 基础」课时是免费的吗?
是的 — 「Active Record 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「Active Record 基础」这节课中我会学到什么?
ORM 基础 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「Active Record 基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。