【问题标题】:Keeping the history of model associations保留模型协会的历史
【发布时间】:2009-07-23 13:46:52
【问题描述】:

我有多个模型需要无限期地保存它们的历史记录,或者至少保存很长时间。该应用程序我将跟踪不同组织中的人员以及其他一些类似协会的每日出勤统计数据。我意识到我永远无法删除用户,因为在删除该用户之前,该用户没有出现在出勤查询中。我遇到的问题是找到一种跟踪旧关联以及查询这些旧关联的好方法。

如果我在用户和组织之间有一个连接表,我可以添加一个新行,其中包含用户和用户所属组织之间的新关联,并根据日期查询旧关联,但我真的没有有任何优雅的方式来做到这一点,一切都感觉很丑。我只是想知道是否有人以前处理过这样的事情,也许他们已经实施了解决方案。谢谢。

【问题讨论】:

    标签: ruby-on-rails database-design activerecord


    【解决方案1】:

    从建模的角度来看,这种关系听起来像是 Employee 和 Employer 之间的关系,即雇佣关系。这将包含对 Employee 和 Employer 的引用以及 TimePeriod 的一些概念(即 startDate 和 end Date)。如果您想查询“活跃”员工,那么他们都是具有 startDate = Now() 的员工,“已终止”员工具有 endDate

    在您的情况下,我无法判断用户和组织之间的关系是什么,以及是什么使这种关系开始和结束,但可能存在类似于雇佣、成员资格、注册或合同的概念。你说的每日出勤,不就是一段时间内的每日出勤吗?时间段是您查询的基础。

    希望对您有所帮助,
    浆果

    【讨论】:

      【解决方案2】:

      创建一个 is_deleted 字段,以便您仍然可以查询那些“已删除”的用户,但修改您的代码,使他们在其他任何地方的行为都如同被删除一样。然后,您永远不需要实际删除该行并丢失数据。

      【讨论】:

      • 我得到了这么多,但我正在寻找一种方法,可以轻松获取与用户关联的当前组织,同时保留与同一用户的组织的所有旧关联以前有过。我有很多关联,必须以相同的方式保持。
      • 这个连接表是否只有 user_id 和 organization_id?如果是这样,您也可以在其中放置一个日期字段吗?您可以使用“加入日期”、“解除关联日期”和名为 is_current 的字段来快速确定他们当前属于哪个组织。
      【解决方案3】:

      有许多插件可以跟踪模型的修订,包括它们的关联。看看这个搜索revision-related plugins

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 2020-04-15
        • 2012-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        相关资源
        最近更新 更多