华仔学Rails guide-Active Record基础

收藏文章 点赞鼓励

1Active Record是什么?

Active Record是MVC模型中的M(模型),是Rails框架中用ruby语言构建的一个类(class),负责处理数据和业务逻辑。处理业务逻辑的方式是:把业务逻辑转化成对象的之间相互作用再转化成数据库的增删改查(CRUD)。业务逻辑转化成对象的之间相互作用是通过程序设计,对象的之间相互作用转化成数据库的增删改查(CRUD)是通过技术手段-对象关系映射(ORM)实现。

ORM技术的优点:

  • 把应用中的对象和关系型数据库中的数据表连接起来
  • 对象的属性和对象之间的关系可以通过一种简单的方法从数据库中获取,无需直接编写 SQL 语句
  • 也不过度依赖特定的数据库种类,不管数据库是使用mysql、pg、sqlite、其他都能很好支持

数据库表和Active Record类的映射关系:

  • 一个子表就是一个类
  • 一行数据就是个一个实例对象
  • 一个字段就是实例对象的一个属性
  • 通过表里的外键来建立对象与对象之间的关系
  • ......

2Active Record的“多约定少配置”

在其他语言编程语言和开发框架中,可能必须编写很多的配置代码,而Active Record遵循Rails的基本原则“约定优于配置”,通过一些约定来实现默认配置如命名约定、模式约定等,只有约定无法满足才需要而外配置。

2.1命名约定

默认情况下,Rails使用命名约定来查找模型和数据库表之间的映射关系:默认模型名字用单数+snake_case写法,模型类名用单数+CamelCase写法,表名用复数+snake_case写法,例如:

2.2模式约定

根据字段的作用不同,Active Record也对数据库表中的字段命名做了约定:

  • 主键,默认情况下,Active Record使用id作为表的主键,在使用Active Record迁移创建数据库表时会自动创建这个字段。
  • 外键,默认写法:单数表名+snake_case,如 item_id,order_id。添加模型关联后,Active Record会查找这个字段。

还有一些可选字段,可为Active Record实例添加更多的功能。

  • created_at :创建记录时,自动设为当前的日期和时间
  • updated_at :更新记录时,自动设为当前的日期和时间
  • lock_version :在模型中添加乐观锁
  • type :让模型使用单表继承
  • (association_name) _type :存储多态关联的类型
  • (table_name)_count :缓存所关联对象的数量。比如说,一个Article有多个Comment 列存各篇文章现有的评论数量;

备注:这些字段是可选字段,但已在Active Record中做为保留字段,不能随意更改

3创建Active Record模型

创建Active Record模型的过程很简单,只需要继承ApplicationRecord类就行了,例如:

app/model/product.rb
1
2
3
class Product < ApplicationRecord

end 

上面的代码会创建Product模型,对应于数据库中的products表。同时,products表中的字段 也能映射到Product模型实例的属性上。

4Active Record的强大功能

rails开发这么畅快的原因中就有这么2点

  1. 是rails把框架中一些复杂的配置通过约定直接实现了
  2. 是rails把许多常见的功能都以非常简单的使用方式给开发者提前准备好了

以下是Active Record的一些高频使用的功能介绍,后面会有专节讲解。

4.1迁移功能

Acitve Record的迁移功能是指给模型设定具有哪些字段,然后让数据库产生映射模型的数据表的功能,其中会使用到DSL(Domain-Spacific-Language)用户处理数据库模式。

4.2数据操作CRUD

Active Record的数据操作功能是指Active Record提供了非常简便的方法来完成数据的CRUD等操作,不需要写复杂的SQL语句。CRUD是指四种数据操作的简称:C表示create创建,R表示read读取,U表示update更新,D表示destroy删除,是数据库操作中最常见的行为。如

1
2
3
4
user = User.create(name: "Jack", occupation: "teacher")   #  create
user = User.first  # read
user.update(name: "David")  # update
user.destroy # destroy

4.3回调功能

Active Record的回调功能是指对操作模型生命周期的特定事件时绑定一定的事件的功能,如创建新记录前,对数据进行验证就是一种回调。

4.4数据验证

Active Record的数据验证是指对数据库数据进行操作之前,有时会需要先对数据进行校验,如文字标题的存在性校验、省份证号码的唯一性校验、邮箱的格式校验等,这是一种常见的业务需求。

评论区