Ruby on rails開發從頭來(五十五)- ActiveRecord基礎(一對一關聯關係)

來源:互聯網
上載者:User

一對一關聯,或者更正確的說是一對零或一對一關聯,是通過外鍵引用到另外一張表中的至多一條記錄實現的,下圖描述了orders表和invoices表的關係:

在Active Record中,要表示這樣的關係需要在Order類中添加has_one:Invoice聲明,並且同時在Invoice類中添加聲明belongs_to:order,事實上,我們可以把這種關聯關係看作是相互的,我們可以使Invoice有一個Order,也可以使Order有一個Invoice,不同的是,在將Object Storage Service到資料庫時,如果我們給一個對象賦予has_one關聯給另一個既存對象,關聯的對象將會自動被儲存。例如:

an_invoice = Invoice.new(...)order.invoice = an_invoice # invoice gets saved

如果我們給一個對象賦予belongs_to關聯到另一個對象,那麼它將不會自動被儲存,例如:

order = Order.new(...)an_invoice.order = order # Order will not be saved

還有另外一個不同點,當你給一個對象賦予has_one關聯時,如果指向一個既存的子物件,這個既存對象的外部索引鍵關聯將會被移除,也就是清零,如下圖:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.