我有一個應用程序,我想重寫銷燬我的許多模型的行爲。用例是用戶可能有合理需要刪除特定記錄,但實際上從數據庫中刪除該行將會破壞影響其他相關模型的參照完整性。例如,系統的用戶可能想要刪除不再經營業務的客戶,但需要維護與該客戶的交易。重寫Rails ActiveRecord銷燬行爲的最佳方式是什麼?
看來我至少有兩個選項:
- 複製數據到一定的模型有效反規範化我的數據模型,使刪除的記錄不會影響相關的數據。
- 重寫ActiveRecord的「銷燬」行爲來設置一個標誌,指示用戶「刪除」了該記錄並使用此標誌隱藏記錄。
我錯過了一個更好的方法嗎?
選項1對我來說似乎是一個可怕的想法,儘管我很樂意聽到相反的論點。
選項2似乎有點Rails-ish,但我想知道處理它的最佳方法。我是否應該創建自己的繼承自ActiveRecord :: Base的父類,並覆蓋那裏的destroy方法,然後從我想要這種行爲的模型中繼承那個類?我是否也應該重寫查找器行爲,以便標記爲已刪除的記錄不會被默認返回?
如果我這樣做,我將如何處理動態查找器?什麼命名範圍?
感謝Matchu。你是對的,我需要再次使用這些數據,所以無效不是我正在尋找的。雖然Ryan的插件在他的回答中提到的簡單性很有吸引力,但你對這種行爲的明確說服的說法使我相信。我很欣賞這種迴應。 – 2010-11-21 15:20:40