中文地址
M: Actice Record负责创建和使用需要持久存入数据库的数据,对象关系映射(ORM)系统
一. 基础
- 模式约定
外键:命名规则 e.g item_id
主键:默认整数字段id为主键,使用ActiveRecord迁移数据库时自动创建字段
其他可选字段: 创建模型->创建Product模型,对应于products表,表中字段映射到模型属性中
1
2
3//继承ApplicationRecord
class Product < ApplicationRecord
end命名覆盖
覆盖表名:生成的默认表名为products
(1)可在models中指定表名self.table_name = “my_products”
(2)models中手动指定固件 fixtures :my_products
覆盖表的主键:
self.primary_key = “product_id”- CRUD
(1)C
create创建并保存;new只创建不保存,调用save保存
(2)R
User.all User.first User.find_by User.where().order
(3)D
user.destroy
二.迁移:按照时间顺序管理数据库模型
- 使用Ruby DSL,同时更新db/schema.rb
在迁移中完成Active Record无法完成的撤销:在迁移中使用reversible方法;在迁移文件中用up和down代替change 创建迁移
(1)创建独立的迁移文件 bin/rails generate migration AddPartNumberToProducts
根据时间戳来确定要运行的迁移和迁移运行的顺序
(2)迁移文件名称
AddXXXToYYY 或 RemoveXXXFromYYY会创建相应的change1
2
3
4
5
6
7
8
9//$ bin/rails generate migration AddPartNumberToProducts part_number:string
def change
add_column :products, :part_number, :string
end
//$ bin/rails generate migration AddPartNumberToProducts part_number:string:index
def change
add_column :products, :part_number, :string
add_index :products, :part_number
endCreateXXX
1
2
3
4
5
6
7// $ bin/rails generate migration CreateProducts name:string part_number:string
def change
create_table :products do |t|
t.string :name
t.string :part_number
end
end(3)创建联结数据表
1
2
3
4
5
6
7$ bin/rails g migration CreateJoinTableCustomerProduct customer product
def change
create_join_table :customers, :products do |t|
# t.index [:customer_id, :product_id]
# t.index [:product_id, :customer_id]
end
end模型生成器
$ bin/rails generate model Product name:string description:text- 编写迁移文件
(1)主键
默认情况下,create_table 方法会创建 id 主键。可以用 :primary_key
选项来修改主键名称,还可以传入 id: false 选项以禁用主键。
(2)创建联结数据表
create_join_table :products, :categories, table_name: :categorization
(3)修改数据表
t.remove t.rename t.string t.index
(4)修改字段 change_column无法撤销
change_column :products, :part_number, :text
//TO DO - 运行迁移 bin/rails任务(默认为开发环境)
(1)rails db:migrate VERSION=20080906120000
调用所有未运行的迁移中的change或者up方法;自动执行db:schema:dump任务
运行VERSION之前的迁移文件,VERSION为迁移文件名的数字前缀
(2)bin/rails db:rollback (STEP=3):回滚最后一个(三个)迁移
bin/rails db:migrate:redo STEP=3:重复执行最后三个迁移
(3)rails db:setup 创建数据库
(4)rails db:reset 删除并重新创建数据库
(5)rails db:migrate:up 和 rails db:migrate:down VERSION=20080906120000
(6)rails db:migrate RAILS_ENV=test 修改运行环境
(7)rails db:drop:all 撤销所有migrate操作 - 修改现有迁移
必须先回滚 bin/rails db:rollback,再执行rails db:migrate
//To Do
三.数据验证
- 何时验证:保存时验证
失败则不会存入:create,create!,save,save!,update,update! - 存在验证
validates :name - 长度验证
1
2
3
4validates :name, length: { minimum: 2 }
validates :bio, length: { maximum: 500 }
validates :password, length: { in: 6..20 }
validates :registration_number, length: { is: 6 }
定制信息::wrong_length、:too_long 和 :too_short 选项,%{count} 表示长度限制的值1
2validates :bio, length: { maximum: 1000,
too_long: "%{count} characters is the maximum allowed" }
- 检查空值
1
validates :name, :login, :email, presence: true