
- 学习 Ruby on Rails
- Rails 2.1 主页
- Rails 2.1 简介
- Rails 2.1 安装
- Rails 2.1 框架
- Rails 2.1 目录结构
- Rails 2.1 示例
- Rails 2.1 数据库设置
- Rails 2.1 Active Record
- Rails 2.1 迁移
- Rails 2.1 控制器
- Rails 2.1 视图
- Rails 2.1 布局
- Rails 2.1 脚手架
- Rails 2.1 和 AJAX
- Rails 2.1 上传文件
- Rails 2.1 发送邮件
- 高级 Ruby on Rails 2.1
- Rails 2.1 RMagick 指南
- Rails 2.1 基本 HTTP 认证
- Rails 2.1 错误处理
- Rails 2.1 路由系统
- Rails 2.1 单元测试
- 高级 Ruby on Rails 2.1
- Rails 2.1 提示与技巧
- 快速参考指南
- 快速参考指南
- Ruby on Rails 2.1 有用资源
- Ruby on Rails 2.1 - 资源
- Ruby on Rails 2.1 - 讨论
Ruby on Rails 2.1 - Active Record 模型
Rails Active Record 是 Rails 提供的对象关系映射 (ORM) 层。它紧密遵循标准的 ORM 模型,如下所示:
表映射到类,
行映射到对象,以及
列映射到对象属性。
Rails Active Record 提供了关系数据库中的表与操作数据库记录的 Ruby 程序代码之间的接口和绑定。Ruby 方法名称会根据数据库表的字段名称自动生成。
每个 Active Record 对象都具有用于数据库访问的 CRUD(**C**reate、**R**ead、**U**pdate 和 **D**elete)方法。此策略允许在数据库表和应用程序对象之间进行简单的设计和直接映射。
将领域模型转换为 SQL
将领域模型转换为 SQL 通常很简单,只要记住您必须编写 Rails 友好的 SQL。在实践中,您必须遵循某些规则,例如:
每个实体(例如 book)在数据库中都会有一个以其名称命名的表,但使用复数形式(books)。
每个这样的实体匹配表都包含一个名为 id 的字段,该字段包含插入到表中的每个记录的唯一整数。
给定实体 x 和实体 y,如果实体 y 属于实体 x,则表 y 包含一个名为 x_id 的字段。
任何表中的大部分字段都存储该实体简单属性的值(任何数字或字符串)。
创建 Active Record 文件
要为我们在上一章中介绍的库应用程序的实体创建 Active Record 文件,请从应用程序目录的顶层发出以下命令。
C:\ruby\library\> ruby script/generate model Book C:\ruby\library\> ruby script/generate model Subject
您告诉生成器创建名为 Book 和 Subject 的模型来存储书籍和主题的实例。请注意,您正在将 Book 和 Subject 大写并使用单数形式。这是您每次创建模型时都应遵循的 Rails 范式。
当您使用 generate 工具时,Rails 会创建实际的模型文件,其中包含模型特有的所有方法以及您定义的业务规则,一个用于执行测试驱动开发的单元测试文件,一个样本数据文件(称为 fixtures)与单元测试一起使用,以及一个 Rails 迁移,使创建数据库表和列变得容易。
除了创建许多其他文件和目录外,这还会创建名为 **book.rb** 和 **subject.rb** 的文件,其中包含 **app/models** 目录中的骨架定义。
book.rb 中的内容 -
class Book < ActiveRecord::Base end
subject.rb 中的内容
class Subject < ActiveRecord::Base end
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
创建模型之间的关联
当您的 Rails 应用程序中有多个模型时,您需要在这些模型之间创建连接。您可以通过关联来做到这一点。Active Record 支持三种类型的关联:
**一对一** - 当一个项目恰好拥有另一个项目的单个项目时,就会存在一对一关系。例如,一个人恰好有一个生日,或者一条狗恰好有一个主人。
**一对多** - 当单个对象可以是许多其他对象的成员时,就会存在一对多关系。例如,一个主题可以有多本书。
**多对多** - 当第一个对象与第二个对象的多个对象相关联,而第二个对象与第一个对象的多个对象相关联时,就会存在多对多关系。
您通过向模型添加声明来指示这些关联 - has_one、has_many、belongs_to 和 has_and_belongs_to_many。
现在您需要告诉 Rails 您希望在库数据系统中建立哪些关系。为此,请修改 book.rb 和 subject.rb 以如下所示:
class Book < ActiveRecord::Base belongs_to :subject end
我们在上面的示例中使用了单数 subject,因为一本书可以属于单个主题。
class Subject < ActiveRecord::Base has_many :books end
我们在上面的示例中使用了复数 books,因为一个主题可以有多本书。
实现验证
验证的实现是在 Rails 模型中完成的。您输入数据库的数据是在实际的 Rails 模型中定义的,因此在同一位置定义有效数据的内容才有意义。
打开 **book.rb** 并添加以下验证:
class Book < ActiveRecord::Base belongs_to :subject validates_presence_of :title validates_numericality_of :price, :message=>"Error Message" end
- **validates_presence_of** - 防止“NOT NULL”字段缺少用户输入。
- **validates_numericality_of** - 防止用户输入非数字数据。
除了上面提到的验证之外,还有一些其他常见的验证。查看Rails 快速指南。
接下来是什么?
在下一章中,我们将学习 Rails 迁移,它允许您使用 Ruby 来定义对数据库模式的更改,从而可以使用版本控制系统来使事物与实际代码保持同步。