假设我创建了一个用户,他在我的网站上留下了一些评论,然后我使用@ user.destroy删除它们。
现在当我显示评论时,它会引发错误,因为@user对于他们写的评论是零。
考虑到这一点,解决这个问题的好方法是什么:
答案 0 :(得分:2)
我通常使用一个名为deleted_at
的字段,然后定义一个模型方法archive
,用当前时间填充deleted_at
并保存。然后,模型的默认范围为where('deleted_at IS NULL')
(如果您喜欢squeel,则为where{deleted_at == nil}
。)
我使用它比用户模型更多。我甚至已经抽象出了功能,所以在每个模型中我想要可存档我只是在模型中做archived_by :deleted_at
。在您的应用程序中,您可能需要检查并查看所请求的记录是否已存档/删除,但在大多数情况下,这是一个简单而优雅的解决方案。将记录从删除/存档中删除就像record.deleted_at = nil
(或record.archive(false)
/ record.unarchive
一样简单)。
为了在大型桌面上保持高效,我建议将deleted_at
列编入索引。
答案 1 :(得分:0)
另一个更简单的想法是放置一个名为trashable的布尔字段,并使用一个关注点来定义范围(如@dhh建议的https://gist.github.com/1015151)。
所以你需要的是创建一个执行@ user.trash的控制器动作! (我会把垃圾扔到垃圾桶上)并且用户被“软删除”。