有一個

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]