Ruby on Rails 2.1 - 活动记录模型


Rails Active Record 是Rails 提供的对象/关系映射(ORM) 层。它紧密遵循标准 ORM 模型,如下所示 -

  • 表映射到类,

  • 行映射到对象,以及

  • 列映射到对象属性。

Rails Active Records 提供了关系数据库中的表与操作数据库记录的 Ruby 程序代码之间的接口和绑定。Ruby 方法名称是根据数据库表的字段名称自动生成的。

每个 Active Record 对象都有用于数据库访问的CRUD(创建读取更新删除)方法。该策略允许简单的设计以及数据库表和应用程序对象之间的直接映射。

将领域模型转换为 SQL

将域模型转换为 SQL 通常很简单,只要您记住必须编写 Rails 友好的 SQL。实际上,您必须遵循某些规则,例如 -

  • 每个实体(例如书籍)在数据库中都有一个以其名称命名的表,但以复数形式(书籍)。

  • 每个这样的实体匹配表都有一个名为 id 的字段,其中包含插入表中的每条记录的唯一整数。

  • 给定实体x和实体y,如果实体y属于实体x,则表y有一个名为x_id的字段。

  • 任何表中的大部分字段都存储该实体的简单属性(任何数字或字符串)的值。

创建活动记录文件

要为上一章中介绍的库应用程序的实体创建 Active Record 文件,请从应用程序目录的顶层发出以下命令。

C:\ruby\library\> ruby script/generate model Book
C:\ruby\library\> ruby script/generate model Subject

您告诉生成器创建名为“书籍”和“主题”的模型来存储书籍和主题的实例。请注意,您将 Book 和主题大写并使用单数形式。这是每次创建模型时都应该遵循的 Rails 范例。

当您使用生成工具时,Rails 会创建实际的模型文件,其中包含模型特有的所有方法和您定义的业务规则、用于执行测试驱动开发的单元测试文件、要使用的示例数据文件(称为固定装置)通过单元测试和 Rails 迁移,可以轻松创建数据库表和列。

除了创建许多其他文件和目录之外,这还将在app/models目录中创建名为book.rbsubject.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 迁移,它允许您使用 Ruby 定义对数据库模式的更改,从而可以使用版本控制系统使内容与实际代码保持同步。