我最近遇到了一个实例,当时我从数据库中删除了一个用户,但Posts的索引页面因为编写特定帖子的用户不再存在而破了。
这让我想知道始终使用是否是好习惯:dependent => :破坏?或者是否有一个不那么复杂的替代解决方案,在删除用户时不会使整个页面中断?我想这更像是一个商业决策,但我认为当用户删除他的帐户时,我不一定要删除所有内容。
我想我可以使用像
这样的东西<%= link_to post.author.username unless post.author.blank? ...... %>
但是,这将使得在每一行中都包含它将是一项非常繁琐和混乱的任务。
有关此问题的任何建议/提示吗?
答案 0 :(得分:6)
而不是删除用户停用用户,这样您就不会破坏任何关系,您的数据将保持一致。
答案 1 :(得分:2)
您必须使用dependent: :destroy
(或dependent: :delete
)或使用deleted_at
列软删除您的用户,然后确定用户的范围,以便检索未删除的用户。
您可以编写SoftDeletable
模块,并将其包含在您要软删除的任何模型中,或使用其中一个宝石:https://www.ruby-toolbox.com/categories/Active_Record_Soft_Delete。
答案 2 :(得分:1)
我认为有多种可能性。但这取决于你想要什么。
我不喜欢存储我的个人数据的网站,如果我希望他们删除它,请不要将其删除。
如果用户同意保留他的数据,您可以将deleted_at attr设置为true。当用户不满意时,删除他的个人资料和评论。
此外,您可以覆盖用户名的getter属性,以获取已删除用户的标准名称:
# author.rb
def username
return read_attribute :username if deleted_at.blank?
"unnamed"
end