Rails 3 - 删除用户但保留内容?

时间:2011-02-28 21:17:17

标签: ruby-on-rails ruby-on-rails-3 database-design destroy

我似乎已经陷入了一些困境。我正在尝试编写一种方法来销毁用户,但仍保留其内容。

目前在我的应用中,公司拥有众多用户,用户属于一家公司。如果公司需要,公司可以使用户处于非活动状态,但我也希望公司能够在终止等情况下从其帐户中删除用户。

我简单地说,在破坏时,将外来的company_id键设置为用户表中的nil。但是,通过这样做,公司将丢失这个旧用户的工作,这是不可能发生的事情,因为信息是在对company_id进行查询时填充的。

有没有人想过用类似数据库设计解决这个问题的好方法?或者我是否必须回到原点,找出更有效地做到这一点的方法。

由于

4 个答案:

答案 0 :(得分:3)

这实际上是一个接口问题,而不是数据模型问题。当然,如果您需要保留其信息,则不应该实际删除/销毁用户。但是,如果您需要一种方法来移除用户而不仅仅是让用户处于非活动状态,您可以为“已终止”状态添加另一个选项。然后它只取决于你在前端显示这些终止用户的方式和位置(或者你可能永远不会显示它们)。

答案 1 :(得分:3)

“软删除”模式可能是最简单的方法。在这种情况下,您添加一个布尔语义的字段,这意味着,基本上是“活动”或“已删除”。

为了最大限度地减少对现有代码的影响,您可以将现有数据复制到具有更新架构的新表,并创建一个与旧表同名的视图,仅包括那些未标记为已删除的记录;不需要了解“已删除”用户的客户仍然会幸福地不知道这些记录。

答案 2 :(得分:1)

您可能想要通过设置已删除的标记来结帐acts as paranoid,该用户会对用户进行软删除。这样行就会保留在数据库中,但不会显示在任何通用查询结果中。

答案 3 :(得分:0)

是的可以结账

  

rails3_acts_as_paranoid - 允许您隐藏和恢复记录而不实际删除它们。

这是您的方案的最佳技巧。