我似乎已经陷入了一些困境。我正在尝试编写一种方法来销毁用户,但仍保留其内容。
目前在我的应用中,公司拥有众多用户,用户属于一家公司。如果公司需要,公司可以使用户处于非活动状态,但我也希望公司能够在终止等情况下从其帐户中删除用户。
我简单地说,在破坏时,将外来的company_id键设置为用户表中的nil。但是,通过这样做,公司将丢失这个旧用户的工作,这是不可能发生的事情,因为信息是在对company_id进行查询时填充的。
有没有人想过用类似数据库设计解决这个问题的好方法?或者我是否必须回到原点,找出更有效地做到这一点的方法。
由于
答案 0 :(得分:3)
这实际上是一个接口问题,而不是数据模型问题。当然,如果您需要保留其信息,则不应该实际删除/销毁用户。但是,如果您需要一种方法来移除用户而不仅仅是让用户处于非活动状态,您可以为“已终止”状态添加另一个选项。然后它只取决于你在前端显示这些终止用户的方式和位置(或者你可能永远不会显示它们)。
答案 1 :(得分:3)
“软删除”模式可能是最简单的方法。在这种情况下,您添加一个布尔语义的字段,这意味着,基本上是“活动”或“已删除”。
为了最大限度地减少对现有代码的影响,您可以将现有数据复制到具有更新架构的新表,并创建一个与旧表同名的视图,仅包括那些未标记为已删除的记录;不需要了解“已删除”用户的客户仍然会幸福地不知道这些记录。
答案 2 :(得分:1)
您可能想要通过设置已删除的标记来结帐acts as paranoid,该用户会对用户进行软删除。这样行就会保留在数据库中,但不会显示在任何通用查询结果中。
答案 3 :(得分:0)
是的可以结账
rails3_acts_as_paranoid - 允许您隐藏和恢复记录而不实际删除它们。
这是您的方案的最佳技巧。