【问题标题】:Rails 3 - Removing a User but retaining content?Rails 3 - 删除用户但保留内容?
【发布时间】:2011-02-28 21:17:17
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 您还可以在其中添加一个视图,当您需要验证用户是否处于活动状态时,该视图只显示“未终止”员工。
    • 好吧,这绝对是我要走的方向。我认为用户尝试再次注册新公司可能存在问题,但实际上他们可能使用的是来自新域的电子邮件。谢谢杰米。
    【解决方案2】:

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

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

    【讨论】:

    • 我在 Rails 中经常使用视图。它们非常有用。
    【解决方案3】:

    您可能想签出acts as paranoid,它只需设置一个已删除标志即可软删除用户。这样,该行将保留在数据库中,但不会显示在任何通用查询结果中。

    【讨论】:

      【解决方案4】:

      可以结账

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

      这是最适合您的场景的技术。

      【讨论】:

        猜你喜欢
        • 2020-10-20
        • 2020-03-17
        • 2015-07-10
        • 2012-03-15
        • 2021-12-31
        • 2017-01-12
        • 1970-01-01
        • 2011-01-02
        • 2011-06-08
        相关资源
        最近更新 更多