Ruby on Rails,一对多关联(One-to-Many)
来源:互联网 发布:大数据开发语言 编辑:程序博客网 时间:2024/06/13 12:14
在上一篇文章中,我们知道通过has_one和belongs_to方法定义一对一关联关系。接下来是更常见的情况,一对多关联。
比如老师与所教课程的关系,一个老师负责多个课程。换成对象之间的关系就是:一个老师has may课程,课程belongs to老师。
和一对一关联的相似之处是
- 关联关系也是通过外键建立的。
- 子对象都会拥有一个父对象的引用,使用belongs_to表示与父对象的关系。
- 一个父对象对应多个子对象而不是只对应一个。所以需要在父对象中改用has_many引用子对象。
- 由于has_may个子对象,所以在书写类定义的时候要用复数,这也是符合语言习惯的。
- 获取子对象的方法不再返回单个子对象,而是返回子对象的列表。方法名字也是复数。
- rails g model Course name:string teacher_id:integer
生成了迁移任务,其中teacher_id是指向teachers表的外键。
- #创建课程表的迁移任务
- class CreateCourses < ActiveRecord::Migration
- def change
- create_table :courses do |t|
- t.string :name
- t.integer :teacher_id
- t.timestamps
- end
- end
- end
修改Teacherl类,增加一个has_many :courses的声明。和一对一关联类似在Course类定义中增加belongs_to :teacher的声明,建立指向Tacher的引用。
- #Teacher类定义
- class Teacher < ActiveRecord::Base
- belongs_to :class_room
- has_many :courses
- attr_accessible :class_room_id, :name
- end
- #Course类定义
- class Course < ActiveRecord::Base
- belongs_to :teacher
- attr_accessible :name, :teacher_id
- end
创建两个课程对象。
- > course_geometry = Course.create(:name=>'Geometry')
- > course_algebra = Course.create(:name=>'Algebra')
由于在类定义中建立了引用关联,对象可以进行适用于这些关联关系的方法调用。比如说取得引用的对象列表使用teacher.courses方法,注意方法名字是复数。
- > teacher = Teacher.find(1)
- > teacher.courses
- => []
teacher还没有与course进行关联,可以先取得引用对象列表在通过<<向courses列表中添加
- > teacher.courses<<course_geometry
- => [#<Course id: 1, name: "Geometry", teacher_id: 1, created_at: "2012-12-09 05:15:33", updated_at: "2012-12-09 05:22:04">]
除此之外还有其他方法可用
- #直接指定所有引用
- teacher.courses=[course_geometry,course_algebra]
- #删除指定引用
- teacher.courses.delete(course_geometry)
- #清除所有引用
- teacher.courses.clear
- #判断是否存在引用
- teacher.courses.empty?
- #查看引用数量
- teacher.courses.size
0 0
- Ruby on Rails,一对多关联(One-to-Many)
- Ruby on Rails,一对多关联(One-to-Many)
- Ruby on Rails,一对一关联(One-to-One)
- Ruby on Rails,一对一关联(One-to-One)
- Hibernate单向一对多关联(Unidirectional One-To-Many)要点
- hibernate 一对多(one-to-many)双向关联
- Ruby on rails开发从头来(五十六)- ActiveRecord基础(一对多关联关系)
- Ruby on rails开发从头来(五十六)- ActiveRecord基础(一对多关联关系)
- Hibernate 多表关联映射- 一对多关系映射(one-to-many)
- Hibernate学习笔记:一对多的关联关系(one-to-many) 双向关联
- Hibernate学习笔记:一对多的关联关系(one-to-many) 双向关联
- 关于为什么单向一对多(one-to-many)要使用关联表的再思考
- hibernate单向一对多关联映射(one-to-many)XML与注解版
- Hibernate关联映射(多对一 --- many-to-one)
- hibernate映射技巧one-to-many(单项一对多)
- hibernate映射技巧one-to-many(双向一对多)
- hibernate中一对多(one-to-many)的实例
- nhibernate中的one-to-many一对多,有例子
- 动态链接库之静态链接和动态链接
- Java学习之路:不走弯路,就是捷径
- 随机数
- php实现验证码
- Struts的ModelDriven接口的使用
- Ruby on Rails,一对多关联(One-to-Many)
- java之 ------ 类的封装、继承和多态(三)
- 2015 CSUST校赛 - 超级快速幂【费马小定理】+【快速幂取模】
- RailsCasts中文版,#19 Where Administration Goes 为页面增加权限校验1
- Factorization Machines
- RailsCasts中文版,#20 Restricting Access 为页面增加权限校验2
- 矩阵快速幂 poj 3070
- Android开发《二》短信发送
- wince7下SD host驱动学习笔记