国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

香港云服务器
服務(wù)器之家 - 腳本之家 - Ruby - ruby on rails中Model的關(guān)聯(lián)詳解

ruby on rails中Model的關(guān)聯(lián)詳解

2020-05-12 10:37藤原佐為 Ruby

本文給大家詳細(xì)講解了ruby on rails中model關(guān)聯(lián)的幾種形式,包括一對(duì)多,一對(duì)一,多對(duì)多。并給出了詳細(xì)的示例,有需要的小伙伴可以參考下

前言:
在學(xué)習(xí)model關(guān)聯(lián)之前,首先要牢記一下幾點(diǎn):
1.關(guān)聯(lián)關(guān)系,兩端都要寫(xiě)好,否則會(huì)出現(xiàn)初學(xué)者看不懂的錯(cuò)誤。而且對(duì)于理解代碼,非常有好處。
2.model的名字是單數(shù),controller是復(fù)數(shù)。
3.blong_to后面必須是單數(shù),而且必須是小寫(xiě)。has_many后面必須是復(fù)數(shù)。

一:一對(duì)多

例如:
王媽媽有兩個(gè)孩子,小明和小亮。可以說(shuō),王媽媽,有多個(gè)孩子。也可以說(shuō):小明,有一個(gè)媽媽;小王,有一個(gè)媽媽。我們一般在設(shè)計(jì)表的時(shí)候,是這樣設(shè)計(jì)的:
mothers表中id和name
sons表中有id和name
為了增加邏輯關(guān)系,主外鍵關(guān)系,會(huì)在多的一方,增加一列,所以sons表中有三列,id和name和mother_id(對(duì)應(yīng)了mothers表的id)
普通SQL:

?
1
select test_associate.mothers.name from test_associate.mothers inner join test_associate.sons on sons.mother_id = mothers.id where sons.name = '小李'

ruby代碼:

?
1
2
3
4
5
6
7
class Mother
 has_many :sons
end
 
class Son
 belongs_to :mother
end

解釋:一個(gè)媽媽又多個(gè)孩子,一個(gè)兒子屬于一個(gè)媽媽。
我們?cè)趓ails console可以測(cè)試下:
xiao_wang = Son.first 
mom = xiaowang.mother

這個(gè) .mother 方法就是由 class Son的belongs_to :mother這句話生成的。
也就是相當(dāng)于轉(zhuǎn)換成了一下的sql語(yǔ)句:

?
1
2
3
4
select * from mothers
  join sons
  on sons.mother_id = mothers.id
  where sons.id = 1

詳細(xì)解釋:

A:belongs_to :mother
B:belongs_to :mother, :class => 'Mother', :foreign_key => 'mother_id'
A=B

這個(gè)就是Rails最典型的根據(jù)慣例來(lái)編程,聲明哪個(gè)表對(duì)應(yīng)的是哪個(gè)class,再在class之間聲明好關(guān)聯(lián)關(guān)系。
1.belongs_to :mother, rails就能判斷出: mothers 表,是一的那一端。 而當(dāng)前class 是: "class Son", 那么rails 就知道了 兩個(gè)表的對(duì)應(yīng)關(guān)系。
2.:class => 'Mother', 表示, 一的那一端, 對(duì)應(yīng)的model class是Mother. 根據(jù)rails的慣例, Mother model對(duì)應(yīng)的是 數(shù)據(jù)庫(kù)中的 mothers 表。
3.:foreign_key => 'mother_id', rails就知道了, 外鍵是 'mother_id'. 而一對(duì)多關(guān)系中, 外鍵是保存在 多的那一端(也就是 sons, 所以說(shuō),在 sons表中, 必須有一個(gè)列, 叫做: mother_id )
所以, 這個(gè)復(fù)雜的SQL 條件就齊備了, 可以生成了。
上面的ruby代碼,配置好之后, 就可以這樣調(diào)用:

?
1
2
3
4
son = Son.first
son.mother # .mother方法, 是由 class Son 中的 belongs_to 產(chǎn)生的。
mother = Mother.first
mother.sons  # .sons 方法, 是由 class Mother 中的 hash_many 產(chǎn)生的。

二:一對(duì)一,比較簡(jiǎn)單,也不常用,這里不介紹。(老公和老婆)

三:多對(duì)多

例如:
一個(gè)學(xué)生,有多個(gè)老師,(學(xué)習(xí)了多門(mén)課程)
一個(gè)老師,可以教多個(gè)孩子(教一門(mén)課程,但是有好多學(xué)生來(lái)聽(tīng)這個(gè)課程)
我們往往會(huì)這樣做:
students有id和name兩個(gè)字段
teachers有id和name兩個(gè)字段
放在任何一個(gè)表中都不合適,這是我們需要一張中間表,也就是橋梁表。
lessons有id和name和student_id和teacher_id
原始SQL:

?
1
2
3
4
5
6
7
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代碼:

?
1
2
3
4
class Student
 has_many :lessons
 has_many :teachers, :through => :lessons
end

提示:has_many :teachers, :through => :lessons 相當(dāng)于
has_many :teachers, :class => 'Teacher', :foreign_key => 'teacher_id', :throught => :lessons
class Teachers 
  has_many :lessons 
  has_many :students, :through => :lessons 
end

查看小王的老師有哪些,同上面的原始SQL語(yǔ)句。

?
1
Student.find_by_name('小王').teachers

以上就是本文給大家分享的全部?jī)?nèi)容了,給出的示例也非常的簡(jiǎn)單易懂,希望大家能夠喜歡。

原文鏈接:http://www.jianshu.com/p/ed91f63d9ae4

延伸 · 閱讀

精彩推薦
  • Ruby剖析 Ruby 訪問(wèn)控制

    剖析 Ruby 訪問(wèn)控制

    前面,我們說(shuō) Ruby 沒(méi)有函數(shù),只有方法.而且實(shí)際上有不止一種方法.這一節(jié)我們介紹 訪問(wèn)控制 (accesscontrols). 想想當(dāng)我們?cè)谧罡邔佣皇窃谝粋€(gè)類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個(gè)技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • RubyRuby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼,數(shù)據(jù)是隨機(jī)的,所以每次的記錄都會(huì)不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過(guò)一個(gè)上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫(xiě)下來(lái)總結(jié)一下 ...

    可樂(lè)加糖4762020-04-12
  • Ruby簡(jiǎn)要說(shuō)明Ruby中的迭代器

    簡(jiǎn)要說(shuō)明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動(dòng)態(tài)語(yǔ)言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    這篇文章主要介紹了Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實(shí)例來(lái)進(jìn)行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
739
主站蜘蛛池模板: 亚洲精品国产setv | 亚洲国产精品久久久久秋霞不卡 | 久久久九九 | 在线观看国产视频 | 黄色精品在线 | 精品美女久久久 | 亚洲免费视频在线 | 国产精品久久久久久久 | 日韩欧美一级 | 日本国产欧美 | 亚洲视频在线观看网址 | 日本精品一区二区三区视频 | 免费看一区二区三区 | 午夜私人影院 | 欲色视频 | 亚洲一区二区三区在线播放 | 国产美女视频网站 | av网站免费在线观看 | 中文字幕2019 | 精品一区二区三区免费 | 欧美伊人 | 亚洲欧洲日韩 | 日本中文字幕在线看 | 国产精品1 | 亚洲人成在线播放 | 欧美在线观看一区 | 黄瓜av| 国产精品日本一区二区不卡视频 | 精品久久久久久 | 精品视频网站 | 极品一区 | 不卡一区| 久久精品无码一区二区三区 | 女人夜夜春高潮爽av片 | 综合伊人 | 日韩激情一区 | 欧美日韩视频一区二区 | 日韩h视频 | 91精品国产乱码久久久久久 | 自拍偷拍av| 久久亚洲精品国产精品紫薇 |