我使用 rails 作為 ruby?? web 框架。我有一個與另一個物件關聯的物件。例如:假設我們在 Rails 上創建一個 Twitter 克隆,如果我們洗掉一個 Twitter 用戶,我們也會洗掉他們所有的推文。這看起來像這樣:
class TwitterAcc < ApplicationRecord
has_many :tweets, dependent: :destroy
belongs_to :user
end
此代碼片段意味著如果我們洗掉用戶的 Twitter 帳戶,那么我們應該洗掉他們所有的推文。我們如何在不洗掉推文的情況下洗掉 Twitter 帳戶?
class TwitterAcc < ApplicationRecord
has_many :tweets
belongs_to :user
end
此代碼段 ^^^ 不起作用。它會拋出這個錯誤"ActiveRecord::InvalidForeignKey"
uj5u.com熱心網友回復:
問題是(如果事情是正確的)你的 TwitterAcc 表和推文之間有一個外鍵。所以一條推文記錄不能有一個不存在的 tweeter_acc_id。如果您嘗試破壞 tweeter_acc,就會出現這種情況。PSQL 對此并不滿意
所以你有多種選擇:
- 或者您允許您的 tweets 表記錄 twitter_acc id,但隨后您需要洗掉外鍵(IMO 不是一個好主意)
- 或者您允許您的 tweets 表在 tweets#twitted_acc_id 上具有 nil 值( 您可能需要
belongs_to :tweet_acc, optional: true在您的 Tweet 模型上使用)并has_many :tweets, dependent: :nullify在您的TweeterAcc模型上使用 - 或者您只軟洗掉您的推特帳戶模型,因此軟洗掉的記錄對于您的應用程式業務邏輯變得“不可見”,但您不需要處理可為空或不存在的 FK ( https://github.com/jhawthorn/丟棄)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/498043.html
