0

我似乎让自己陷入了困境。我正在尝试编写一种方法来破坏用户,但仍保留他们的内容。

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

我打算简单地在销毁时将用户表中的外国 company_id 键设置为 nil。但是,通过这样做,公司会丢失这个老用户的工作,这是不可能发生的,因为信息是通过对 company_id 进行查询来填充的。

有没有人想到一个很好的小方法来解决这个问题与类似的数据库设计?还是我必须回到原点来找出一种更有效地做到这一点的方法。

谢谢

4

4 回答 4

3

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

于 2011-02-28T21:22:54.997 回答
3

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

为了尽量减少对现有代码的影响,您可以将现有数据复制到具有更新架构的新表中,并创建与旧表同名的视图,仅包括那些未标记为已删除的记录;不需要知道“已删除”用户的客户会很高兴地不知道这些记录。

于 2011-02-28T21:27:07.920 回答
1

您可能希望结帐行为偏执,仅通过设置已删除标志来软删除用户。这样,该行将保留在数据库中,但不会出现在任何通用查询结果中。

于 2011-02-28T21:26:21.910 回答
0

是的可以结帐

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

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

于 2012-11-20T21:12:55.580 回答