前言:
在学习model关联之前,首先要牢记一下几点:
1.关联关系,两端都要写好,否则会出现初学者看不懂的错误。而且对于理解代码,非常有好处。
2.model的名字是单数,controller是复数。
3.blong_to后面必须是单数,而且必须是小写。has_many后面必须是复数。

一:一对多
例如:
王妈妈有两个孩子,小明和小亮。可以说,王妈妈,有多个孩子。也可以说:小明,有一个妈妈;小王,有一个妈妈。我们一般在设计表的时候,是这样设计的:
mothers表中id和name
sons表中有id和name
为了增加逻辑关系,主外键关系,会在多的一方,增加一列,所以sons表中有三列,id和name和mother_id(对应了mothers表的id)
普通SQL:
select test_associate.mothers.name from test_associate.mothers inner join test_associate.sons on sons.mother_id = mothers.id where sons.name = '小李'
ruby代码:
class Mother has_many :sons end class Son belongs_to :mother end
解释:一个妈妈又多个孩子,一个儿子属于一个妈妈。
我们在rails console可以测试下:
xiao_wang = Son.first
mom = xiaowang.mother
这个 .mother 方法就是由 class Son的belongs_to :mother这句话生成的。
也就是相当于转换成了一下的sql语句:
select * from mothers join sons on sons.mother_id = mothers.id where sons.id = 1
详细解释:
A:belongs_to :mother
B:belongs_to :mother, :class => 'Mother', :foreign_key => 'mother_id'
A=B
这个就是Rails最典型的根据惯例来编程,声明哪个表对应的是哪个class,再在class之间声明好关联关系。
1.belongs_to :mother, rails就能判断出: mothers 表,是一的那一端。 而当前class 是: "class Son", 那么rails 就知道了 两个表的对应关系。
2.:class => 'Mother', 表示, 一的那一端, 对应的model class是Mother. 根据rails的惯例, Mother model对应的是 数据库中的 mothers 表。
3.:foreign_key => 'mother_id', rails就知道了, 外键是 'mother_id'. 而一对多关系中, 外键是保存在 多的那一端(也就是 sons, 所以说,在 sons表中, 必须有一个列, 叫做: mother_id )
所以, 这个复杂的SQL 条件就齐备了, 可以生成了。
上面的ruby代码,配置好之后, 就可以这样调用:
son = Son.first son.mother # .mother方法, 是由 class Son 中的 belongs_to 产生的。 mother = Mother.first mother.sons # .sons 方法, 是由 class Mother 中的 hash_many 产生的。
二:一对一,比较简单,也不常用,这里不介绍。(老公和老婆)
三:多对多
例如:
一个学生,有多个老师,(学习了多门课程)
一个老师,可以教多个孩子(教一门课程,但是有好多学生来听这个课程)
我们往往会这样做:
students有id和name两个字段
teachers有id和name两个字段
放在任何一个表中都不合适,这是我们需要一张中间表,也就是桥梁表。
lessons有id和name和student_id和teacher_id
原始SQL:
select teachers.*, students.*, lessons.* from lessons from teachers , join teachers on lessons.teacher_id = teachers.id join students on lessons.student_id = students.id where students.name = '小王'
Ruby代码:
class Student has_many :lessons has_many :teachers, :through => :lessons end
提示:has_many :teachers, :through => :lessons 相当于
has_many :teachers, :class => 'Teacher', :foreign_key => 'teacher_id', :throught => :lessons
class Teachers
has_many :lessons
has_many :students, :through => :lessons
end
查看小王的老师有哪些,同上面的原始SQL语句。
Student.find_by_name('小王').teachers
以上就是本文给大家分享的全部内容了,给出的示例也非常的简单易懂,希望大家能够喜欢。
# ruby
# on
# rails
# 教程
# model关联
# Windows下Ruby on Rails开发环境安装配置图文教程
# ruby on rails 代码技巧
# 攻克CakePHP(PHP中的Ruby On Rails框架)图文介绍
# 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境
# 在Ruby on Rails中使用AJAX的教程
# CentOS中配置Ruby on Rails环境
# win7安装ruby on rails开发环境
# 小王
# 多个
# 是由
# 的是
# 有一个
# 可以说
# 中有
# 小明
# 这是
# 知道了
# 关联关系
# 也不
# 成了
# 放在
# 都要
# 就能
# 是这样
# 会在
# 这句话
# 这样做
相关文章:
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何在阿里云香港服务器快速搭建网站?
如何在宝塔面板中创建新站点?
长沙做网站要多少钱,长沙国安网络怎么样?
建站主机与服务器功能差异如何区分?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何用VPS主机快速搭建个人网站?
高端建站如何打造兼具美学与转化的品牌官网?
如何快速搭建高效WAP手机网站?
如何配置IIS站点权限与局域网访问?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
电商平台网站制作流程,电商网站如何制作?
北京网站制作网页,网站升级改版需要多久?
非常酷的网站设计制作软件,酷培ai教育官方网站?
高防服务器如何保障网站安全无虞?
建站VPS选购需注意哪些关键参数?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何通过宝塔面板实现本地网站访问?
如何高效配置香港服务器实现快速建站?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
如何制作网站标识牌,动态网站如何制作(教程)?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
制作网站公司那家好,网络公司是做什么的?
南京网站制作费用,南京远驱官方网站?
如何高效配置IIS服务器搭建网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
企业微网站怎么做,公司网站和公众号有什么区别?
C#怎么创建控制台应用 C# Console App项目创建方法
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何在服务器上三步完成建站并提升流量?
济南网站制作的价格,历城一职专官方网站?
如何在阿里云完成域名注册与建站?
怎么将XML数据可视化 D3.js加载XML
已有域名和空间,如何快速搭建网站?
如何续费美橙建站之星域名及服务?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
西安专业网站制作公司有哪些,陕西省建行官方网站?
seo网站制作优化,网站SEO优化步骤有哪些?
广州商城建站系统开发成本与周期如何控制?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
定制建站哪家更专业可靠?推荐榜单揭晓
自助网站制作软件,个人如何自助建网站?
简历在线制作网站免费版,如何创建个人简历?
黑客如何利用漏洞与弱口令入侵网站服务器?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何选择CMS系统实现快速建站与SEO优化?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
C#如何序列化对象为XML XmlSerializer用法
*请认真填写需求信息,我们会在24小时内与您取得联系。