Ruby on Rails Tutorial 第六章笔记 用户建模

6. 用户建模

这一章作者通过建立,完善 app/models/user.rb(即 User 模型),进而讲述了关于建立 data model(数据模型)的相关知识.

建立 model 和 object 的过程

原理: Rails 通过 Active Record 来与数据库进行交互,这样,不必使用数据库的结构化查询语言(SQL), 就可以对创建、删除、修改模型.
新建 model 命令:
rails generate model <ModelName> <AttributeName>
其中, <ModelName>是模型的名字, <AttributeName> 是该模型的属性的名称(即列名).
进行迁移
创建 model 之后,还未将改动在数据库层进行,因此需要执行迁移命令. 迁移命令为 rails db:migrate
创建、修改、查找、删除用户对象
数据库层进行改动之后,就可以创建该模型的对象了.以下为各种命令的格式:

  • 创建对象: <ModelName>.new,例如 User.new 就是新建一个 User 对象.
  • 保存对象(将对象存入数据库): <ObjectName>.save例如 执行 user = User.new 之后,执行 user.save.
  • 获取对象的属性值:<ObjectName>.<AttributeName>,例如: user.name 是获取 user 的 name 属性的值
  • 删除对象: <ObjectName>.destroy 例如: user.destroy 是删除 user 这个 object.
  • 查找对象: <ModelName>.find 默认通过 object 的 id 来查找用户,也可以通过 <ModelName>.find_by通过属性查找用户
  • 更新用户属性值: 通过 <ObjectName>.update_attribute(:AttributeName, "Value") 更新单个值,也可通过 <ObjectName>.update_attributes(AttributeName1: "Value", AttributeName1: "Value") 更新多个值.

进行验证

当新建模型,对应的属性的值的有效性应该得到保障,有四类可以验证的规则:

  1. 存在性验证
  2. 长度验证
  3. 格式验证
  4. 唯一性验证

这些验证,都在 app/model/<ModelName>.rb 中通过 validates 方法进行设定.

存在性验证:
格式: 
validates :<AttributeName>, presence: true
说明: validates 是 Rails 的内置方法,其接受的第一个参数是属性的符号名,第二个参数是 optional 的散列,在这里为 presence: true.
长度验证
格式: 
validates :<AttributeName>, length: {maxmum: 50 }
说明: length 为验证参数, 其具有限制上限的 maxium 参数.
格式验证
格式:
VALID_<ATTRIBUTE_NAME>_REGEX = regex expression
validates :<AttributeName>, format: {with: VALID_<ATTRIBUTE_NAME>_REGEX}
唯一性验证:
格式:
validates :<AttributeName>, uniqueness: true
如果要为不区分大小写的话, 那么应该增改为
unqueness: { case_sensitive: false }
但是添加之后,仍然存在可能会在数据库创建重复 object 的可能性的缺陷,因此应该也在数据库层中保证唯一,并且为了提高查找的速度,添加索引.
方法是生成迁移文件: rails generate migration add_index_to_users_email
并在迁移文件中加上:
add_index :users, :email, unique: true
这样就能确保在数据库层中 email 是唯一的,并且为 user 和 email 建立索引.

添加安全密码

添加安全密码使用一个 Rails 方法就可以实现,这个方法是 has_secure_password. 其工作原理如下:

  1. 在数据库中用 password_digest 列储存安全密码的哈希值
  2. 在数据对象中创建一对虚拟属性: password 和 password_confirmation(虚拟属性是在模型对象中有属性,但是在数据库中没有对应的列)
  3. 获得 authenticate 方法,输入值为密码,如果密码正确,那么返回用户对象(即返回 true)

前提1
该方法需要使用 gem 'bcrypt' ,因此需要在 Gemfile 中添加并安装.
前提2
have_secure_password
生成一个数据迁移文件: rails generate migration add_password_to_users password_digest: string
然后在迁移文件中加入:
add_column :users, :password_digest, :string
然后进行迁移
操作
在 modles/user.rb 中直接添加一行 has_secure_password.即可完成添加安全密码.

posted @ 2019-08-28 20:59  FBshark  阅读(141)  评论(0编辑  收藏  举报