Ruby 以其优雅语法 + 高开发效率深受开发者喜爱,而数据库操作几乎贯穿所有 Ruby 项目。
无论你使用的是 Ruby on Rails,还是 纯 Ruby + ORM / 原生 SQL,下面这 10 个数据库操作要点,都是你必须掌握的硬核基础。


1️⃣ Ruby 中最常见的数据库访问方式

Ruby 操作数据库,主要有三种模式:

方式说明
ActiveRecordRails 默认 ORM(最常用)
Sequel轻量、高性能 ORM
原生 SQL使用数据库驱动直接执行

👉 结论

  • Web 项目:ActiveRecord
  • 高性能 / 微服务:Sequel
  • 极致控制:原生 SQL

2️⃣ 使用 ActiveRecord 连接数据库

基本配置(Rails)

development:
  adapter: mysql2
  encoding: utf8mb4
  database: demo_db
  username: root
  password: 123456
  host: localhost

ActiveRecord 会自动:

  • 建立连接池
  • 管理事务
  • 处理编码

3️⃣ CRUD 操作(增删改查)必须烂熟于心

新增(Create)

User.create(name: "Tom", age: 20)

查询(Read)

User.where(age: 20)
User.find_by(name: "Tom")

更新(Update)

user.update(age: 21)

删除(Delete)

user.destroy

📌 这是面试必考内容


4️⃣ 查询条件与链式调用技巧

ActiveRecord 的强大之处在于 链式查询

User.where(status: 1)
    .where("age > ?", 18)
    .order(created_at: :desc)
    .limit(10)

优点:

  • 可读性高
  • 自动防 SQL 注入
  • 延迟执行(Lazy Load)

5️⃣ 关联关系(Association)是核心能力

class Order < ApplicationRecord
  belongs_to :user
end

class User < ApplicationRecord
  has_many :orders
end

使用:

user.orders
order.user

⚠️ 不理解关联,等于 Rails 只会写一半


6️⃣ N+1 查询问题与性能优化

错误示例(N+1)

User.all.each do |u|
  puts u.orders.count
end

正确方式(includes)

User.includes(:orders).each do |u|
  puts u.orders.size
end

📌 N+1 是 Rails 性能杀手


7️⃣ 事务(Transaction)必须会用

ActiveRecord::Base.transaction do
  user.save!
  order.save!
end

作用:

  • 保证数据一致性
  • 出错自动回滚
  • 金融 / 订单系统必备

8️⃣ 使用原生 SQL(必要时)

有些复杂查询 ORM 写起来很难:

sql = "SELECT * FROM users WHERE age > ?"
User.find_by_sql([sql, 18])

✅ 什么时候用 SQL?

  • 报表
  • 复杂 JOIN
  • 性能瓶颈场景

9️⃣ 数据库索引与迁移(Migration)

创建索引

add_index :users, :email, unique: true

修改表结构

rails generate migration AddAgeToUsers age:integer
rails db:migrate

📌 不会 Migration = 不会 Rails


🔟 防止 SQL 注入与安全最佳实践

❌ 错误写法:

User.where("name = '#{params[:name]}'")

✅ 正确写法:

User.where("name = ?", params[:name])

ActiveRecord 默认提供:

  • 参数绑定
  • 转义机制
  • 安全查询接口

🧠 进阶补充(高手必看)

  • 使用 pluck 减少内存占用
  • 使用 select 限制字段
  • 善用 explain 分析 SQL
  • 合理设置连接池大小
  • 避免在循环中频繁查询数据库

📌 总结速览表

能力是否必须
CRUD
关联查询
事务
性能优化
原生 SQL⭐⭐
数据库索引⭐⭐⭐