1. Active Record
1.1 Active Record模式
在Active Record模式中,对象中既有持久储存在database中的数据,也有针对数据的操作。Active Record模式把数据存储逻辑作为对象的一部分,处理对象的用户知道如何把数据写入database,以及从database中读出数据。
1.2 ORM: Object-Relational Mapping对象关系映射
ORM是一种技术手段,把应用程序中的*对象*和**关系型数据库管理系统**(RDBMS:Relational Database Management System)的*表单*联系起来。通过ORM,应用程序中的对象的属性和关系能直接从database中存储或获取,而不用通过SQL语句。
1.3 Active Record作为ORM的框架
-表示model与其data
-表示models之间的关系
-表示相关models之间的继承结构
-在存入database之前,验证models
-用面向对象的方法操作database
2. Active Record中的“多约定少配置”原则( Convention over Configuration)
2.1 naming conventions
Rails通过把model类名转换成复数,来查找对应的数据表。例:model类为Book,对应的数据表就是books。
-数据表(database table):复数,下划线分割单词(例:book_clubs)
-模型类名(model class):单数,每个单词首字母大写(例:BookClub)
2.2 schema convention(模式约定)
Active Record对数据表的列属性也做了相应的命名约定
-外键(foreign keys):使用singularized_table_name_id形式命名,例:item_id, order_id。创建model**关联**后,Active Record会查找该列属性。
-主键(primary keys):Active Record将一个列名为“id”的数字列作为数据表的主键,当使用Active Record Migrations来创建表单后,这一列将会被自动创建。
3 创建Active Record Models
4 不使用约定命名(待)
5 CRUD:读写数据
5.1 Create
例:User模型类有两个属性:name和occupation,调用create方法将实例化一个对象,并把该对象对应的记录存入数据库中:
user = User.create(name: "David", occupation: "Code Artist")
使用new方法可以实例化一个对象,但不会保存。调用user.save可以把记录保存入数据库:
user = User.new
user.name = "David"
user.occupation = "Code Artist"
5.2 Read
# return a collection with all users
users = User.all
# return the first user
user = User.first
# return the first user named David
david = User.find_by(name: 'David')
# find all users named David who are Code Artists and sort by created_at
# in reverse chronological order
users = User.where(name: 'David', occupation: 'Code Artist').order('created_at DESC')
5.3 Update
user = User.find_by(name: 'David')
user.name = 'Dave'
user.save
5.4 Delete
user = User.find_by(name: 'David')
user.destroy
6 Validation数据验证
把数据存入数据库前需要进行验证,所以调用create,save,update这三个方法时会做数据验证,验证失败则返回false,数据库不做修改。
7 Callbacks回调
回调允许在模型生命周期里绑定代码到特定事件,当事件发生时,将执行这些代码。
8 Migrations数据迁移
Rails提供一种DSL(domain-specific language)语言来管理数据库的模式(schema)。
Rails记录哪些文件被应用到数据库,并提供了回滚(rollback)功能。
创建数据库表单时候,运行:
rake db:migrate
撤销时运行:
rake db:rollback