Ruby on Rails 2.1 - Active Records 模型
Rails Active Record 是 Rails 提供的对象/关系映射 (ORM) 层。它严格遵循标准 ORM 模型,如下所示 −
表映射到类,
行映射到对象,
列映射到对象属性。
Rails Active Records 提供了关系数据库中的表与操作数据库记录的 Ruby 程序代码之间的接口和绑定。 Ruby 方法名称是根据数据库表的字段名称自动生成的。
每个 Active Record 对象都有用于数据库访问的 CRUD(Create、Read、Update 和 Delete)方法。此策略允许在数据库表和应用程序对象之间进行简单的设计和直接的映射。
将域模型转换为 SQL
将域模型转换为 SQL 通常很简单,只要您记住必须编写 Rails 友好的 SQL 即可。实际上,您必须遵循某些规则,例如 −
每个实体(例如 book)在数据库中都会获得一个以其命名的表,但以复数形式(books)命名。
每个这样的实体匹配表都有一个名为 id 的字段,其中包含插入表中的每条记录的唯一整数。
给定实体 x 和实体 y,如果实体 y 属于实体 x,则表 y 有一个名为 x_id 的字段。
任何表中的大部分字段都存储该实体的简单属性的值(任何数字或字符串)。
创建 Active Record 文件
要为上一章介绍的图书馆应用程序的实体创建 Active Record 文件,请从应用程序的顶层发出以下命令目录。
C: uby\library\> ruby script/generate model Book C: uby\library\> ruby script/generate model Subject
您正在告诉生成器创建名为 Book 和 Subject 的模型来存储书籍和主题的实例。请注意,您将 Book 和 Subject 大写并使用单数形式。这是 Rails 范例,每次创建模型时都应遵循此范例。
使用生成工具时,Rails 会创建实际的模型文件,其中包含模型特有的所有方法和您定义的业务规则、用于执行测试驱动开发的单元测试文件、用于单元测试的示例数据文件(称为 Fixtures)以及可轻松创建数据库表和列的 Rails 迁移。
除了创建许多其他文件和目录外,这还会在 app/models 目录中创建名为 book.rb 和 subject.rb 的文件,其中包含一个框架定义。
book.rb 中可用的内容 −
class Book < ActiveRecord::Base end
subject.rb 中可用的内容
class Subject < ActiveRecord::Base end
在模型之间创建关联
当 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
我们在上面的例子中使用了单数主题,因为一本书可以属于一个主题。
class Subject < ActiveRecord::Base has_many :books end
我们在上面的例子中使用了复数书籍,因为一个主题可以有多本书。
实现验证
验证的实现是在 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 Migration,它允许您使用 Ruby 定义对数据库模式的更改,从而可以使用版本控制系统使内容与实际代码保持同步。