【Ruby】Ruby的model学习——Active Record Associations

在阅读的过程中有不论什么问题,欢迎一起交流

邮箱:[email protected]   

QQ:1494713801

一、怎样定义关联

两个model之间经常会存在关联关系,为了解决这些关联引起的复杂操作问题,能够在model定义时定义其关联关系。如:实体customers和orders定义例如以下:

class
Customer < ActiveRecord::Base

  has_many:orders, dependent::destroy

end

 

class
Order < ActiveRecord::Base

  belongs_to:customer

end

二、关联的类型

  • belongs_to
  • has_one
  • has_many
  • has_many :through
  • has_one :through
  • has_and_belongs_to_many

1、belongs_to(与has_many相应)



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDUxNTc2MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="368" height="145">

2、has_one

3、has_many(与belongs_to相应)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDUxNTc2MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="335" height="145">

4、has_many :through

指many-to-many关联,定义的实体通过第三方实体与还有一个实体有0或多个关联(第三方实体与二者都是belongs_to的关系)。

如:病i人预约医生的样例,每一个预约都相应一个医生和一个病人。可是通过预约医生和病人会有多对多的关系。



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDUxNTc2MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="324" height="148">

5、has_one :through

指one-to-one关联,类似于传递依赖,定义的实体通过第三方实体与还有一个实体有一对一的关联。如:每个suppliers都有一个accounts,而每个accounts相应一个account_histories。



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDUxNTc2MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="339" height="142">

6、The has_and_belongs_to_many Association

指不须要第三方介入的many-to-many关联。如:组件与部分,每一个组件包含多个部分,而每一个部分又属于多个组件。



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDUxNTc2MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="332" height="101">

三、关联的选项

  • :as
  • :autosave
  • :class_name
  • :dependent
  • :foreign_key
  • :inverse_of
  • :primary_key
  • :source
  • :source_type
  • :through
  • :validate

1、as:指明为多态关联

2、autosave:若设为true。当owner实体做出某一操作时会自己主动保存或删除其关联实体的对应操作。

3、class_name:关联的实体名不能找到相应的实体,通过该属性设置实际的实体。

4、dependent:当owner实体被摧毁时,关联实体的行为:

destroy:全部关联实体被摧毁

delete_all:全部关联实体被直接从数据库删除,不可恢复

nullify:外键被设为null,不可恢复

restrict_with_exception:抛出异常提示

restrict_with_error:抛出错误提示

5、foreign_key:定义外键的列名

6、inverse_of:指明反向关联的实体

7、primary_key:指明关联项的id

8、through:指明多对多的关系使用的第三方实体

9、validate:假设设为false,关联关系将会无效。

时间: 2024-08-12 17:25:09

【Ruby】Ruby的model学习——Active Record Associations的相关文章

Ruby的model学习——Active Record Associations

一.如何定义关联 两个model之间常常会存在关联关系,为了解决这些关联引起的复杂操作问题,可以在model定义时定义其关联关系.如:实体customers和orders定义如下: class Customer < ActiveRecord::Base   has_many:orders, dependent::destroy end   class Order < ActiveRecord::Base   belongs_to:customer end 二.关联的类型 belongs_to

Yii的学习(4)--Active Record

摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar 在官网原文的基础上添加了CDbCriteria的详细用法. 虽然 Yii DAO 可以处理几乎任何数据库相关的任务, 但很可能我们会花费 90% 的时间以编写一些执行普通 CRUD(create, read, update 和 delete)操作的 SQL 语句. 而且我们的代码中混杂了SQL语句时也会变得难以维护.要解决这些问题,我们可以使用 Active R

Yii的学习(5)--Active Record的关联

官网原文:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.arr 官网中后半段为英文,而且中文的内容比英文少一些,先放到这里,之后有时间再翻译. 我们已经了解了怎样使用 Active Record (AR) 从单个数据表中获取数据. 在本节中,我们讲解怎样使用 AR 连接多个相关数据表并取回关联(join)后的数据集. 为了使用关系型 AR,我们建议在需要关联的表中定义主键-外键约束.这些约束可以帮助保证相关数据的一致性和完整性.

根据现有表操作基于active record的model

指南上都是直接生成mode,然后db migrate来生成数据库,在现实场景中,很可能是反过来的 例如 测试表app_versions rails里面,建立model class AppVersion < ActiveRecord::Base # 这个是手工添加 self.table_name = 'app_versions' end 就好了 测试controller,具体active record的查询可以多google查查 class MyTestController < Applicat

YII Active Record 详细解说

Active Record 虽然 Yii DAO 可以处理几乎任何数据库相关的任务, 但很可能我们会花费 90% 的时间以编写一些执行普通 CRUD(create, read, update 和 delete)操作的 SQL 语句. 而且我们的代码中混杂了SQL语句时也会变得难以维护.要解决这些问题,我们可以使用 Active Record. Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术. 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 A

Active Record: 資料庫遷移(Migration) (转)

Active Record: 資料庫遷移(Migration) Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook

DAL、DAO、ORM、Active Record辨析

转自:http://blog.csdn.net/suiye/article/details/7824943 模型 Model 模型是MVC中的概念,指的是读取数据和改变数据的操作(业务逻辑).一开始我们直接把和数据库相关的代码放在模型里(sql直接写在代码中),这样就会导致以后的维护相当麻烦.业务逻辑的修改都需要开发者重新写sql,如果项目需要分库,需要将sql语句抽出来,放到单独的一层.这一层就是DAL(数据访问层). 持久层Persistence 持久层只是一个逻辑概念而已,主要任务是负责把

架构模式中的Active Record和Data Mapper

架构模式中的Active Record和Data Mapper 概念 在简单应用中,领域模型是一种和数据库结构一致的简单结构,对应每个数据库表都有一个领域类,在这种情况下,有必要让每个对象负责数据库的存取过程,这也就是Active Record(活动记录). 领域对象直接鱼数据库表进行交互,这带来了一个问题,随着领域逻辑变的更加复杂,它就慢慢转变成一个大的领域模型,简单的Active Record已经不能满足要求了. 领域类和表一对一匹配也开始随着把领域逻辑放入更小的类而失效.关系数据库无法处理

Active Record (AR) 类及实现

Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术. 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表示表中的一行. 常见的 CRUD 操作作为 AR 的方法实现.因此,我们可以以一种更加面向对象的方式访问数据. 例如,我们可以使用以下代码向 tbl_post 表中插入一个新行. yii 表单验证规则 <?php classContactFormextendsCFormModel { public$_