📜  Ruby on Rails 2.1-活动记录模型

📅  最后修改于: 2020-10-20 05:14:07             🧑  作者: Mango


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

  • 表映射到类,

  • 行映射到对象,并且

  • 列映射到对象属性。

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

每个活动记录对象具有CRUD(C reate,R EAD,U PDATE,和d elete),用于数据库访问方法。这种策略允许在数据库表和应用程序对象之间进行简单的设计和直接的映射。

将领域模型转换为SQL

只要您记得必须编写对Rails友好的SQL,将域模型转换为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和Subject的模型来存储书籍和主题的实例。请注意,您要大写Book和Subject并使用单数形式。这是每次创建模型时都应遵循的Rails范例。

使用生成工具时,Rails会创建实际的模型文件,其中包含该模型和定义的业务规则所特有的所有方法,用于执行测试驱动的开发的单元测试文件,要使用的示例数据文件(称为夹具)。单元测试和Rails迁移使创建数据库表和列变得容易。

除了创造了许多其他的文件和目录,这将创建一个名为book.rbsubject.rb中包含在app / models目录的骨架定义文件。

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定义对数据库模式的更改,从而可以使用版本控制系统来使事物与实际代码保持同步。