Active Record 基础
Active Record 是什么
Active Record即模型,负责创建和使用需要持久存入数据库中的数据,是一种ORM(对象关系映射)。
在ORM中,模型对应着数据表,对象或者实例对应着数据表的每一个记录,记录的每个字段对应着对象的一个属性。
对象除了拥有与数据表中字段相关联的属性外,还可以定义额外的计算属性或者方法。
对象的属性除了存储基本类型的值外,还可以指向其他模型的实例,即存储数据表之间的关联关系。
Active Record 中的“多约定,少配置”原则
命名约定
模型(类)名称例如LineItem
,对应的数据表(模式)名称默认为line_items
。
模式约定
数据表有不同功能的字段:
- 表示对象固有属性的基本字段
- 主键:默认使用
id
作为数据表的主键 - 外键:表示该对象属于另一个对象,默认为**[下划线分隔的小写单数表名称]_id**,例如
other_table_name_id
模型的其他可选字段:
- 时间戳:
created_at
&updated_at
- 乐观锁:
lock_version
- 单表继承:
type
- 多态关联:
[associate_name]_type
- 关联对象数量的缓存:
[table_name]_count
创建 Active Record 模型
继承ActiveRecord::Base
类,继承符号是<
,例如
class Product < ActiveRecord::Base
end
之后,数据表products
上的字段会自动映射到模型Product
的属性上。
不用默认的命名约定
指定数据表的主键:
class Product < ActiveRecord::Base
self.primary_key = "product_id"
end
其他略
CURD:读写数据
创建
使用类方法create
实例化一个对象,并自动存入数据库:
user = User.create(name: "David", occupation: "Code Artist")
使用类方法new
实例化一个对象,然后使用实例方法save
存入数据库:
user = User.new
user.name = "David"
user.occupation = "Code Artist"
user.new do |user|
user.name = "David"
user.occupation = "Code Artist"
end
user.save
读取
此处略,参考 Active Record 查询。
更新
直接修改属性,调用save
方法存入数据库:
user.name = "barwe"
user.save
使用update
一次更新多个属性:
user.update(name: "barwe", occupation: "student")
使用类方法update_all
一次更新多条记录的多个属性,用法略。
删除
调用实例方法destroy
销毁对象。
数据验证
略。
回调
声明模型时,为特定事件绑定回调函数。此处略。
迁移
使用rake db:migrate
执行,使用rake db:rollback
回滚。
参考
https://ruby-china.github.io/rails-guides/v4.1/active_record_basics.html
评论区