2012-07-02 68 views
4

我最近遇到了一個實例,當時我從數據庫中刪除了一個用戶,但是帖子的索引頁面壞掉了,因爲寫了一個特定帖子的用戶不再存在了。Rails:總是使用「:dependent =>:destroy?」的良好習慣

這讓我懷疑總是使用是否是好習慣:dependent =>:destroy?或者是否有一種不太複雜的替代解決方案,在用戶被刪除時不會使整個頁面中斷?我想這更像是一個商業決定,但我想我不一定要在用戶刪除他的賬戶時刪除所有內容。

我想我可以使用類似

<%= link_to post.author.username unless post.author.blank? ...... %> 

但是這將使它成爲一個非常繁瑣和雜亂的任務必須包括在每行。

關於此事的任何建議/提示?

回答

6

而不是刪除用戶停用用戶,這樣你就不會破壞任何關係,你的數據將保持一致。

2

您必須使用dependent: :destroy(或dependent: :delete)或使用deleted_at列軟刪除您的用戶,然後對用戶進行範圍設定以檢索未刪除的用戶。

您可以編寫一個SoftDeletable模塊,並將其包含在您想要軟刪除或使用其中一種寶石的任何模型中:https://www.ruby-toolbox.com/categories/Active_Record_Soft_Delete

1

我覺得有不止一種可能性。但這取決於你想要什麼。

我不喜歡存儲我的個人數據的網站,並且在我希望他們刪除時不刪除它。

如果用戶同意保留其數據,則可以將deleted_at attr設置爲true。當用戶不滿意時,刪除他的個人資料和評論。

此外,您可以覆蓋username's吸氣屬性爲刪除的用戶具有標準名稱:

# author.rb 
def username 
    return read_attribute :username if deleted_at.blank? 
    "unnamed" 
end 
相關問題