我經常看到的一個一對多的模型關聯驗證碼:什麼時候ActiveRecord關係不依賴::destroy?
class Order
has_many :line_items, dependent: :destroy
#...
end
我的問題是,你是否有任何情況下,你不需要 指定dependent: :destroy
?這不會讓你的數據錯誤嗎?
我經常看到的一個一對多的模型關聯驗證碼:什麼時候ActiveRecord關係不依賴::destroy?
class Order
has_many :line_items, dependent: :destroy
#...
end
我的問題是,你是否有任何情況下,你不需要 指定dependent: :destroy
?這不會讓你的數據錯誤嗎?
對於許多情況下,你想消滅在許多領域卻刪除其關聯的家長關聯的結果你不這樣做,如銀行交易等。例如,如果你有一個電子商務網站,有用戶,然後創建帳戶,他們肯定會有與這些帳戶綁定的訂單。當用戶決定他們不再想保留自己的帳戶,他們可能會刪除它,但是你肯定不想破壞它相關的訂單,儘管這些訂單「belonged_to」的帳戶。刪除這些命令可能會使您遇到很多潛在的問題。
我知道不毀壞家屬的最好理由是不止一個'父母'模特兒has_one
或has_many
。例如,教育應用程序可能有一個家庭和家庭的子女之間的關係has_many
,也有類和孩子之間的關係has_many
。如果一個班級被取消,你不會想要刪除已經註冊的孩子。
我見過並沒有真正刪除任何東西每個企業應用程序。如果帳戶或訂單或其他東西被取消,它不會被刪除,但會進入取消狀態。這完全迴避了這個問題:通過關係刪除並不重要,因爲您永遠不會刪除父項。
你可以說'dependent :: destroy'實際上是翻轉訂單上的開關或類似的東西。 –
如此,儘管在這種情況下它是更常見的_deactivate_帳戶,例如通過翻轉布爾標誌。 – tompave