《Rails-Guides》Reading notes five:Active Record Associations

Rails 支持六種關(guān)聯(lián)?

belongs_to?關(guān)聯(lián)

? ??????belongs_to?關(guān)聯(lián)創(chuàng)建兩個模型之間一對一的關(guān)系,聲明所在的模型實例屬于另一個模型的實例。例如,如果應(yīng)用中有作者和圖書兩個模型,而且每本書只能指定給一位作者,就要這么聲明圖書模型:

相應(yīng)的遷移

has_one?關(guān)聯(lián)

????????has_one?關(guān)聯(lián)也建立兩個模型之間的一對一關(guān)系,但語義和結(jié)果有點不一樣。這種關(guān)聯(lián)表示模型的實例包含或擁有另一個模型的實例。例如,應(yīng)用中每個供應(yīng)商只有一個賬戶,可以這么定義供應(yīng)商模型:

????????根據(jù)使用需要,可能還要為 accounts 表中的 supplier 列創(chuàng)建唯一性索引和(或)外鍵約束。這里,我們像下面這樣定義這一列:

has_many?關(guān)聯(lián)

????????has_many?關(guān)聯(lián)建立兩個模型之間的一對多關(guān)系。在?belongs_to?關(guān)聯(lián)的另一端經(jīng)常會使用這個關(guān)聯(lián)。has_many?關(guān)聯(lián)表示模型的實例有零個或多個另一模型的實例。例如,對應(yīng)用中的作者和圖書模型來說,作者模型可以這樣聲明:

has_many :through?關(guān)聯(lián)

? ??????has_many :through?關(guān)聯(lián)經(jīng)常用于建立兩個模型之間的多對多關(guān)聯(lián)。這種關(guān)聯(lián)表示一個模型的實例可以借由第三個模型,擁有零個和多個另一模型的實例。例如,在醫(yī)療鍛煉中,病人要和醫(yī)生約定練習時間。這中間的關(guān)聯(lián)聲明如下:

has_one :through?關(guān)聯(lián)

????????has_one :through?關(guān)聯(lián)建立兩個模型之間的一對一關(guān)系。這種關(guān)聯(lián)表示一個模型通過第三個模型擁有另一模型的實例。例如,每個供應(yīng)商只有一個賬戶,而且每個賬戶都有一個賬戶歷史,那么可以這么定義模型:

has_and_belongs_to_many?關(guān)聯(lián)

????????has_and_belongs_to_many?關(guān)聯(lián)直接建立兩個模型之間的多對多關(guān)系,不借由第三個模型。例如,應(yīng)用中有裝配體和零件兩個模型,每個裝配體有多個零件,每個零件又可用于多個裝配體,這時可以按照下面的方式定義模型:

自聯(lián)結(jié)

????????設(shè)計數(shù)據(jù)模型時,模型有時要和自己建立關(guān)系。例如,在一個數(shù)據(jù)庫表中保存所有雇員的信息,但要建立經(jīng)理和下屬之間的關(guān)系。這種情況可以使用自聯(lián)結(jié)關(guān)聯(lián)解決:

????????在遷移(模式)中,要添加一個引用字段,指向模型自身:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容