保持模型联想的历史

时间:2009-07-23 13:46:52

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

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

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

3 个答案:

答案 0 :(得分:1)

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

在您的案例中,我无法分辨用户和组织之间的关系,以及关系的起点和终点是什么,但可能存在类似于就业,会员,登记或合同的概念。当你说每日出勤时,是不是每天都有一段时间?时间段是您查询的基础。

希望有所帮助,
Berryl

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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