ruby on rails中Model的关联详解

前言:
在学习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

以上就是本文给大家分享的全部内容了,给出的示例也非常的简单易懂,希望大家能够喜欢。

时间: 2017-07-27

在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境

1.阿里云的一键安装web全环境 下载一键安装web全环境 sh.zip 压缩包 上传至服务器,解压.执行脚本,具体步骤详见这里 $ mv sh.zip /home/tmp/ & cd /home/tmp $ unzip sh.zip $ chmod -R 777 sh & cd sh # 任意选择一种方法执行脚本 # 方法一 $ ./install.sh # 方法二 $ ./install_nginx_xxx.sh $ ./install_mysql_xxx.sh 2.安装RVM与指定的

ruby on rails 代码技巧

git仓库输出 git archive --format=tar --prefix=actasfavor/ HEAD | (cd /home/holin/work/ && tar xf -) 输出到/home/holin/work/actasfavor/目录下 Posted by holin At May 16, 2008 16:42 加载plugins中的controller和model # Include hook code here require 'act_as_favor' #

攻克CakePHP(PHP中的Ruby On Rails框架)图文介绍第1/2页

CakePHP框架首页: http://www.cakephp.org/ 下载后导入工程中,目录结构如下图(使用版本:1.1.19.6305) 搭建PHP环境,这里使用了AppServ2.5.9. 下载主页 http://www.appservnetwork.com/ MySQL中新建数据库blog,并运行如下SQL文建表. /**//* First, create our posts table: */CREATE TABLE posts (    id INT UNSIGNED AUTO_I

在Ruby on Rails中使用AJAX的教程

如果没有听说过 Rails,那么欢迎您外星旅行归来,近几年大概只有那个地方没有听说过 Ruby on Rails 了.Rails 最吸引人的地方是能够很快地建立功能完备的应用程序并运行起来.Rails 为 Ajax 而内置集成的 Prototype.js 库可以轻松快速地创建所谓的富 Internet 应用程序. 本文将逐步引导您创建 Rails 应用程序.然后深入分析如何利用 Ajax 特性编写从服务器上读写数据的 JavaScript 代码. 从容起步 Ajax 之旅--Ajax 技术资源中

CentOS中配置Ruby on Rails环境

详细安装步骤: 一.更新Python centos 中默认安装的python是2.4的版本,因为新版的rails需要提供nodejs的相关支持,需要更新python,更新文章可以直接移步到这个链接 http://www.tomtalk.net/wiki/Python 复制代码 代码如下: yum install -y bzip2*           #nodejs 0.8.5需要,请安装python前,先安装此模块.   wget http://www.python.org/ftp/pytho

win7安装ruby on rails开发环境

前言 看到很多文章都说ruby环境在windows上是非常难搭建,会出现各种各样的怪问题,所以都推荐到linux和mac上安装开发.但是我按照教程搭了下,问题也不算太多.总过大概花费了2个半小时左右就完成了.所以大家不要被吓尿了,下面就把安装的步骤及具体的版本记录了一下供大家参考. 安装步骤: 开发机环境:我使用的开发机:win7 旗舰版 - 64位 (cpu是i5). 1 安装 rubyinstaller-2.0.0-p481.exe     1 选择安装目录:(如:D:\server\Rub

Windows下Ruby on Rails开发环境安装配置图文教程

本文详细介绍如何在Windows配置Ruby on Rails 开发环境,希望对ROR初学者能有帮助. 一.下载并安装Ruby Windows下安装Ruby最好选择 RubyInstaller(一键安装包). 下载地址: http://rubyforge.org/frs/?group_id=167 . 我们这里下载目前较新的rubyinstaller-1.9.3-p0.exe 一键安装包.这个安装包除了包含ruby本身,还有许多有用的扩展(比如gems)和 帮助文档. 双击安装,安装过程出现如下

Windows7下PHP开发环境安装配置图文方法

操作系统:Windows 7 Ultimate WEB服务器:IIS 6.1(内部版本7600). 数据库:MySql5.0.67 PHP版本:5.2.13 我还担心Win7下可能会不兼容,结果是一点问题都没有.    一.安装MySql数据库 MySql数据库在这里下载:http://www.mysql.com/downloads/ 客户端工具Navicat(导航猫)在这里下载:http://www.navicat.com/cn/download/download.html,我下载的是Win3

Windows 10上JDK环境安装配置图文教程

Windows10 上的JDK安装配置 1.前往 JDK 官网下载对应 jdk 版本安装包: 下载地址 本文以 jdk-8u161-windows-x64.exe 为例: 2.双击执行安装包程序: 3.选择需要安装的可选功能: 4.开始安装: 5.中间弹窗需要安装 JRE: 6.开始安装 JRE: 7.程序安装完成. 8.环境变量配置: 在"我的电脑"-"属性"-"高级系统设置"-"环境变量"中增加环境变量: 增加如下图所示的

windows下MySQL 5.7.3.0安装配置图解教程(安装版)

首先MySQL官方网站从http://dev.mysql.com/downloads/下载MySQL服务器安装软件包,我下载为版本" mysql-installer-community-5.7.3.0-m13.msi"不多说,双击进入安装. 如下图: 点击上图红框"Install MySQL Products"进入安装界面,如下图: 根据上图当中第一步骤与第二步骤,进入下图: 进入设置界面,如下图: 在原来旧的版本当中,安装类型有3种安装类型:Typical(典型安

PHP运行环境配置与开发环境的配置(图文教程)

前提示时间一个博友,建议我提供PHP开发环境的搭建文章.当然我们一般在windows平台下开发的居多,那么,今天我就在Windows平台下搭建PHP的调试和开发环境.如果有写的不好的请谅解. 一.总的大概步骤如下   1.下载资料      1).下载wamp      2).下载开发工具ZendStudio   2.安装程序      1).安装wamp      2).安装开发工具ZendStudio   3.配置环境   4.PHP调试   5.PHP开发环境二.步骤详细介绍1.下载资料1

windows10下mysql 8.0 下载与安装配置图文教程

本文为大家分享了mysql8.0下载与安装,供大家参考,具体内容如下 首先要做的是下载8.0版本的mysql,可以到官网上去下,直接百度搜索mysql下载,选择如下网页 进去之后选择社区版,也就是community 选择底部的电脑位数对应的zip版本 也可以直接下载64位的版本 1.安装与配置文件 将下载好的安装包解压缩,路径随意,方便找的到就行.在初始化之前,我们需要配置一下my.ini文件,因为解压缩之后的文件夹中是没有my.ini文件,所以我们需要新建,然后把下面的内容复制进去,按照下面的

4种Windows系统下Laravel框架的开发环境安装及部署方法详解

1.准备工作 1.1PHP集成环境 这里我们使用的是XAMPP,XAMPP是一个功能强大的建站集成软件包,采用一键安装的方式,包含PHP7.0.Mysql.Tomcat等.最新版下载地址:PHP 5.6.28版(32位)|PHP 7.0.13版(32位)这两个版本的XAMPP都不再支持WindowsXP操作系统,这意味着你需要更高版本的Windows操作系统. 注意:由于Laravel5.1要求PHP 5.5.9+(含)版本,所以要针对该PHP版本要求选择合适的XAMPP. 1.2安装Compo

Windows下maven安装配置图文教程(包括本地化仓库配置)

一.下载maven maven官网:http://maven.apache.org/ 下载下来也就是一个压缩文件,解压.我下载的是3.5.2版本,解压之后如下: 路径为 :D:\Program Files\apache-maven-3.5.2 二.配置环境变量 添加自定义变量 :MAVEN_HOME 值为刚才的解压路径:D:\Program Files\apache-maven-3.5.2. MAVEN_OPTS = -Xms128m -Xmx512m (可选) 在path变量末尾加入 ";%M

Windows下使用VMWare搭建Linux环境的步骤(图文)

自从还了Mac 后,原来的笔记本就闲置了下来,这台笔记本的配置还是不错的,可以装几个虚拟机用来平时的搭建小规模集群的实践. 准备工作 安装VMWare 版本 :VMware Workstation 15 Pro 15.5.6 build-16341506 安装步骤没有过多可说的,. 下载 Linux发行版 由于我的云服务器一用的CentOS ,也习惯了,所以这次也是使用了 CentOS 版本 : CentOS 7 可以在 清华镜像站下载 ,一般情况 下载 4.5G 左右的这个 创建虚拟机 打开

Mysql 5.7.17 winx64免安装版,win10环境下安装配置图文教程

下载地址:http://dev.mysql.com/downloads/file/?id=467269 1.解压到自定义目录:我解压到了D盘的根目录 2.添加一个my.ini文件 配置如下: # 设置mysql客户端默认字符集 default-character-set=utf8 #安装目录 basedir = D:\mysql-5.7.17-winx64 #数据存放目录 data目录是要单独创建的,记得是个空文件夹 datadir =D:\mysql-5.7.17-winx64\data #端