ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1)认识Rails中的ActiveRecord

2021-06-13 13:51:34  阅读:205  来源: 互联网

标签:Obj 验证 认识 ActiveRecord create 修饰符 Rails column key


### 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有