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")
更新多个值.
进行验证
当新建模型,对应的属性的值的有效性应该得到保障,有四类可以验证的规则:
- 存在性验证
- 长度验证
- 格式验证
- 唯一性验证
这些验证,都在 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. 其工作原理如下:
- 在数据库中用 password_digest 列储存安全密码的哈希值
- 在数据对象中创建一对虚拟属性: password 和 password_confirmation(虚拟属性是在模型对象中有属性,但是在数据库中没有对应的列)
- 获得 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.即可完成添加安全密码.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具