假設我創建了一個用戶,他在我的網站上留下了一些評論,然後使用@ user.destroy刪除它們。即使用戶被刪除,我該如何保留用戶?
現在,當我顯示註釋時,它會拋出錯誤,因爲@user對他們所寫的評論爲零。
將有什麼好辦法解決這個,考慮到:
- 我仍希望能夠刪除用戶(至少表面上)
- 我想用戶能夠使用相同的憑證重新註冊。
假設我創建了一個用戶,他在我的網站上留下了一些評論,然後使用@ user.destroy刪除它們。即使用戶被刪除,我該如何保留用戶?
現在,當我顯示註釋時,它會拋出錯誤,因爲@user對他們所寫的評論爲零。
將有什麼好辦法解決這個,考慮到:
我通常使用的場稱爲deleted_at
然後定義一個模型方法archive
其與當前時間填充deleted_at
並保存。該模型的默認範圍是where('deleted_at IS NULL')
(或where{deleted_at == nil}
,如果你像我一樣喜歡squeel)。
我比我的用戶模型更多地使用它。我甚至已將功能抽象出來,因此在每個模型中我都希望可以存檔,我只需在模型中執行archived_by :deleted_at
。您的應用程序中可能會有一些地方需要檢查並查看是否存檔或刪除了所需的記錄,但大多數情況下,這是一個簡單而優雅的解決方案。將記錄從刪除/歸檔恢復爲record.deleted_at = nil
(或者如果您願意,可以使用record.archive(false)
/record.unarchive
)。
爲了在大表上執行此操作,我建議索引deleted_at
列。
我希望我可以發表評論,但是與Carl一致,這裏有很多你需要的代碼:http://stackoverflow.com/questions/5140643/how-to-soft-delete-user-with-devise –
另一個更簡單的想法是放入一個名爲trashable的布爾型字段並使用關注來定義範圍(如@dhh建議https://gist.github.com/1015151)。
所以你只需要創建一個@ user.trash的控制器動作! (我會在垃圾箱裏放一個爆炸),用戶被「軟刪除」。
可能重複[如何「軟刪除」用戶與設計](http://stackoverflow.com/questions/5140643/how-to-soft-delete-user-with-devise) – lucapette