其他分享
首页 > 其他分享> > 1)认识Rails中的ActiveRecord

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