2014-01-09 75 views
1

我有客戶和發票。用戶可以刪除客戶,但不能發票。Rails刪除父級模型,但仍然訪問子女

問題是,當一個客戶被刪除,我可以不再做

invoice.customer.name 

因爲客戶是零。

我的畫板上

  1. 一些解決方案保存一些信息有關的發票實例的客戶 發票時作出。

  2. 不刪除客戶,但用布爾 字段將其隱藏。這樣的客戶實例仍然存在。

我知道這個問題可能會被關閉,因爲答案可能是自以爲是的。 Rails幾乎對所有事情都很有見地。在這個問題上,我從來沒有見過一個意見,所以:

在這種情況下鐵軌的最佳做法是什麼?

(如果你有更好的解決辦法,我想看看它)

回答

2

如果你想設置一個deleted_at標誌,我建議使用偏執狂寶石。

https://github.com/radar/paranoia

它是你的第二個選擇是什麼,並啓用了你可能需要的所有範圍。

+0

+1爲偏執狂,似乎是一個不錯的小寶石,我不知道感謝! –

+0

謝謝。我也有公司班。它has_many:customers,:dependent =>:destroy'。當我在客戶類中使用'acts_as_paranoid'調用刪除公司時,您是否知道偏執狂是如何表現的? –

+0

偏執狂只有140行,所以我會鼓勵你閱讀它來理解它背後的機制,https://github.com/radar/paranoia/blob/master/lib/paranoia.rb,看來Rails會刪除堅定但設置了客戶的deleted_at。 – gmaliar

1

你的第二個解決方法似乎就是最好的海事組織。

,而不是刪除客戶,介紹客戶數據庫上刪除標誌(然後將其添加爲default_scope忽略客戶刪除= TRUE)

這樣你可以離開的關係不變。如果你有大量的客戶,你可能需要考慮歸檔機制,但我不擔心這一點。

相關問題