如何删除用户后如何保留用户?

时间:2011-11-23 10:45:17

标签: ruby-on-rails devise

假设我创建了一个用户,他在我的网站上留下了一些评论,然后我使用@ user.destroy删除它们。

现在当我显示评论时,它会引发错误,因为@user对于他们写的评论是零。

考虑到这一点,解决这个问题的好方法是什么:

  • 我仍然希望能够删除用户(至少表面上看)
  • 我希望用户能够使用相同的凭据重新注册。

2 个答案:

答案 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的控制器动作! (我会把垃圾扔到垃圾桶上)并且用户被“软删除”。