16 数据库基础之使用ActiveRecord进行数据库操作

在前一篇文章中,我们讨论了如何生成数据库迁移,以便创建和修改数据库结构。现在,我们将深入了解如何使用ActiveRecord与数据库进行交互。ActiveRecord是Rails的ORM(对象关系映射)工具,使我们能够通过Ruby代码与数据库进行交互,而不必编写原始的SQL查询。

ActiveRecord简介

ActiveRecord提供了一种简单而强大的方式来操作数据库。每个数据库表对应一个ActiveRecord模型,模型的实例对应表中的一行记录。你可以使用模型来创建、读取、更新和删除记录,这些操作统称为CRUD操作。

创建新记录

要在数据库中创建一条新的记录,你可以使用create方法。假设我们有一个User模型,它对应于users表,你可以像下面这样创建一个新用户:

1
2
3
4
5
6
# app/models/user.rb
class User < ApplicationRecord
end

# 创建一个新用户
User.create(name: "Alice", email: "alice@example.com")

这个示例中,我们调用了User.create方法,传入一个包含nameemail的哈希。ActiveRecord会自动将这些信息插入到数据库中。

查询记录

ActiveRecord提供了多种查询数据库记录的方法。最常用的是allfindwhere

查询所有记录

1
2
# 查询所有用户
users = User.all

查询特定记录

1
2
# 按ID查询特定用户
user = User.find(1)

条件查询

1
2
# 查询所有邮箱以@example.com结尾的用户
users = User.where("email LIKE ?", "%@example.com")

更新记录

一旦你找到一个记录,你可以直接修改它的属性,然后调用save方法保存变化。例如:

1
2
3
user = User.find(1)
user.name = "Bob"
user.save

或者更简洁地使用update方法:

1
user.update(name: "Bob")

删除记录

要删除一条记录,你可以使用destroy方法:

1
2
user = User.find(1)
user.destroy

ActiveRecord回调

ActiveRecord支持多种回调,这些回调允许你在创建、更新或删除记录时添加自定义逻辑。例如,你可以在创建用户之前确保所有用户的电子邮件都是唯一的:

1
2
3
4
5
6
7
8
9
10
11
12
class User < ApplicationRecord
before_save :ensure_email_is_unique

private

def ensure_email_is_unique
if User.exists?(email: email)
errors.add(:email, "已经存在,请使用其他邮箱。")
throw(:abort) # 中止保存操作
end
end
end

批量操作

对于需要一次性插入多个记录的场景,ActiveRecord提供了import方法。假设我们有一个Product模型,可以这样批量创建产品:

1
2
3
4
5
6
7
products = [
{ name: "Product1", price: 100 },
{ name: "Product2", price: 200 },
{ name: "Product3", price: 300 }
]

Product.insert_all(products)

小结

在本章节中,我们学习了如何使用ActiveRecord与数据库交互,执行常见的CRUD操作,并了解了如何使用回调和批量操作。ActiveRecord的强大之处在于它提供了一种简洁且优雅的方式来处理数据库操作,而不需要编写繁琐的SQL。

在下一章节中,我们将探索RESTful路由与理解RESTful架构,这将帮助我们在Rails应用中更好地组织资源和控制器,进一步提升我们的全栈开发能力。

16 数据库基础之使用ActiveRecord进行数据库操作

https://zglg.work/rails-zero/16/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论