1)认识Rails中的ActiveRecord
作者:互联网
### Rails是使用Ruby语言编写的web开发框架
Rails以快速敏捷的开发特色著称,并极大的推广了ruby的流行
接下来详细认识下rails中,如何操作数据库,摘抄自《RailUserGuides-5》
**字段修饰符:**
```
limit 修饰符:设置 string/text/binary/integer 字段的最大长度。
precision 修饰符:定义 decimal 字段的精度,表示数字的总位数。
scale 修饰符:定义 decimal 字段的标度,表示小数点后的位数。
polymorphic 修饰符:为 belongs_to 关联添加 type 字段。
null 修饰符:设置字段能否为 NULL 值。
default 修饰符:设置字段的默认值。请注意,如果使用动态值(如日期)作为默认值,那么默认值只会在第一次使时(如应用迁移的日期)计算一次。
index 修饰符:为字段添加索引。
comment 修饰符:为字段添加注释。
```
**外键修饰符:**
```
colume 修饰符:设置外键关联的字段,即本模型使用的外键字段名
primary_key 修饰符:设置关联模型中主键的字段
```
### 1)迁移
>生成迁移: bin/rails generate migration ClassName
迁移类继承自: ActiveRecord::Migrations[5:0]
运行迁移: bin/rails db:migrate VERSION=time
回滚迁移: bin/rails db:rollback
默认函数: def change ... end
支持函数:
- 1) create_table :tables [argv] do |obj| ... done
>支持argv: primary_key: 自定义主键, id: false 禁用id主键
字段格式: **++obj.type column_name [arg]++**
```
create_table :users :primary_key => :uid do |s|
t.string :username
t.string :email
end
```
- 2) change_table :table do |obj| ... done
>字段修改: **++obj.opt colume_name [arg]++**
```
change_table :products do |t|
t.remove :description, :name
t.rename :upccode, :upc_code
end
```
> **[add_column/remove_column] :table, :column, :col_type**
```
add_column :products, :part_number, :string
remove_column :products, :part_number, :string
```
> **change_column :table, :column, :col_type_new**
**rename_column :table, :column1, :column2**
```
change_column :products, :part_number, :integer
rename_column :products, :part_number, :partnum
```
> **[add_index/remove_index] :table, :column**
```
add_index :products, :part_number
remove_index :products, :part_number
```
> **[add_foreign_key/remove_foreign_key] :table1, :table2, argvhash**
```
add_foreign_key :articles, :authors, column: :owner_id, primary_key: :uid
remove_foreign_key :articles, :authors, column: :owner_id, primary_key: :uid
```
> **[add_reference/remove_reference] :table1, :table2, argvhash**
```
add_reference :products, :user, foreign_key: true
remove_reference :products, :user, foreign_key: true
```
### 2)验证
>生成模型: bin/rails generate migration ModelName
>1. 何处验证数据?
模型层中提供了验证数据功能,它即有效的保证了数据的准确性,又提高了数据安全性(包括终端用户)
即避开了SQL验证的依赖性,又提高了控制层验证的复杂性,也脱离了前端验证的不可靠性
>2. 何时验证数据?
**ActiveRecord对象在创建、保存、更新时,执行特定的数据验证过程**;
验证过程包括:新创建对象,和,已存在对象 两种类型
Obj.create [obj.create!] Obj.save [Obj.save!] Obj.update [Obj.update!]
>3. 如何验证数据?
a) 使用 obj.valid?和 obj.invalid? 触发数据验证, 类宏方法: validates
b) 使用 obj.errors.message / obj.errors.details 保存数据验证的结果
c) validates :columns_name, inclusion: {in: with %w()} 设定数据范围
d) validates :columns_name, exclusion: {in: %w()} 排除数据范围
e) validates :columns_name, format: {with: /reg/} 设置数据格式
f) validates :columns_name, length: {maximum: m, minimum: n, is: x} 设置长度
g) validates :columns_name, presence: true 设置存在
h) validates :columns_name, absence: true 设置不存在
i)validates :columns_name, uniqueness: true 唯一性(数据库设置唯一索引)
>4. 任何验证可以使用on & message参数
:on :create 或者 :on :update ==> 指定验证时刻
message: {...} ==> 制定验证失败的提示语
### 3)回调
>生成模型: bin/rails generate migration ModelName
回调是模型对象在整个生命周期过程中,预定义的(闭包)执行方法:
**ActiveRecord对象在创建、保存、更新、删除、及验证时,执行特定的数据验证过程**
>1)ActiveRecord对象在**创建过程**中,可用的回调注册:
```
Obj.before_validation ==> Obj.after_validation
Obj.before_save ==> Obj.around_save
Obj.before_create ==> Obj.around_create ==> Obj.after_create
Obj.after_save
```
>2)ActiveRecord对象在**更新过程**中,可用的回调注册:
```
Obj.before_validation ==> Obj.after_validation
Obj.before_save ==> Obj.around_save
Obj.before_create ==> Obj.around_create ==> Obj.after_create
Obj.after_save
```
>3) ActiveRecord对象在**实例化过程**中,可用的回调注册
```
Obj.after_initialize ==> Class.new 和 Class.find 所实例化的对象都会调用
Obj.after_find ==> Class.find 所加载的对象,要先注册执行这个调用
```
标签:Obj,验证,认识,ActiveRecord,create,修饰符,Rails,column,key 来源: https://blog.51cto.com/rulix9527/2900338