📜  Ruby on Rails-活动记录

📅  最后修改于: 2020-10-20 05:27: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文件,请从应用程序目录的顶层发出以下命令。

library\> rails script/generate model Book
library\> rails 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模型中定义的,因此仅在定义相同位置上定义哪些有效数据时才有意义。

验证是-

  • 标题字段的值不能为NULL。
  • 价格字段的值应为数字。

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