有一個
has_one
關聯與另一個模型建立一對一的連線,但具有不同的語義。此關聯表示模型的每個例項包含或擁有另一個模型的一個例項。
例如,如果應用程式中的每個使用者只有一個帳戶,則你將宣告使用者模型如下:
class User < ApplicationRecord
has_one :account
end
在 Active Record 中,當你具有 has_one
關係時,活動記錄可確保外來鍵中只存在一條記錄。
在我們的示例中:在 accounts 表中,只能有一個具有特定 user_id 的記錄。如果你嘗試為同一使用者關聯另一個帳戶,則會將上一個條目的外來鍵設為 null(使其成為孤立)並自動建立一個新帳戶。即使新條目的儲存失敗以保持一致性,它也會使前一個條目為 null。
user = User.first
user.build_account(name: "sample")
user.save [Saves it successfully, and creates an entry in accounts table with user_id 1]
user.build_account(name: "sample1") [automatically makes the previous entry's foreign key null]
user.save [creates the new account with name sample 1 and user_id 1]