重返Ruby之路 Day15 --- Rails7学习(2)

262 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Object-Relational Mapping 对象关系映射

对象关系映射(ORM)库将数据库表映射到类。如果一个数据库有一个叫做 Order 的表, 那么我们的程序就会有一个叫做 Order 的类。这个表中的 Rows 对应于类的对象—— 一个特定的顺序被表示为 Order 类的对象。在该对象中,属性用于获取和设置各个列。 我们的 Order 对象有获取和设置金额、销售税等的方法。

此外,包装数据库表的 Rails 类提供了一组执行表级操作的类级方法。例如,我们可能需要找到具有特定 ID 的订单。这是作为一个类实现的方法返回相应的 Order 对象。在 Ruby 代码中,它可能看起来像这样:

order = Order.find(1)\
puts "Customer #{order.customer_id}, amount=$#{order.amount}"

有时这些类级别的方法返回对象的集合:

Order.where(name: 'dave').each do |order| 
  puts order.amount
end

最后,对应于表中各行的对象具有对该行进行操作的方法。可能最广泛使用的是 save() ,将行保存到数据库的操作:

Order.where(name: 'dave').each do |order|
  order.pay_type = "Purchase order" 
  order.save
end

因此,ORM 层将表映射到类,将行映射到对象,将列映射到这些对象的属性。Class 方法用于执行表级操作,实例方法对单个行执行操作。

Active Record 活动记录

Active Record 是 Rails 提供的 ORM 层。它严格遵循标准的 ORM 模型: 表映射到类, 行映射到对象,列映射到对象属性。它的配置方式与大多数其他 ORM 库不同。通过依赖惯例并从合理的默认值开始,Active Record 最小化了开发者执行的配置数量。

require 'active_record'

class Order < ApplicationRecord
end

order = Order.find(1) 
order.pay_type = "Purchase order" 
order.save

这段代码使用新的 Order 类来获取 id 为 1 的订单,并修改 pay _ type。(现在,我们省略了创建数据库连接的代码) Active Record 减轻了我们处理底层数据库的麻烦,让我们可以自由地处理业务逻辑。

Active Record is the solid model foundation of the Rails MVC architecture.