菜鸟-创作你的创作

【Ruby数据库操作终极指南】:10个你必须掌握

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


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

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

方式说明
ActiveRecordRails 默认 ORM(最常用)
Sequel轻量、高性能 ORM
原生 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)

优点:


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?


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 默认提供:


🧠 进阶补充(高手必看)


📌 总结速览表

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