📅  最后修改于: 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),用于数据库访问方法。这种策略允许在数据库表和应用程序对象之间进行简单的设计和直接的映射。
只要您记得必须编写对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.rb和subject.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
除了上面提到的验证,还有一些其他常见的验证。检查Rails快速指南。
在下一章中,我们将学习Rails Migration,它使您可以使用Ruby定义对数据库模式的更改,从而可以使用版本控制系统来使事物与实际代码保持同步。