【问题标题】:Tracking changes on instances of a class and their associations - thoughts?跟踪类实例及其关联的变化 - 想法?
【发布时间】:2010-07-14 10:07:34
【问题描述】:

我有一个有很多相关模型的类问题。在我的应用程序的一个页面上,我列出了所有当前问题的摘要,以及来自相关记录的各种信息。最终,这是一个值的散列,然后我将其打印到 csv 样式的行中(我将从此将其称为“行散列”)

我现在要求只显示给定时间段内问题(或其相关数据)的更改。我目前正在考虑最好的方法来做到这一点。以下是我目前的一些想法,欢迎任何反馈、想法、建议等。

1) 方法 1 -acts_as_audited 这是我的第一个想法,因为我以前在其他应用程序中使用过它。 aaa 的问题是它只跟踪记录数据的变化(即它不关心关联是否发生变化)。所以,我也可以审计所有相关的记录,但是试图通过将不同的审计记录捆绑在一起来拼凑发生的变化听起来就像一场噩梦。

2) 将新旧哈希值保存到序列化字段中:即 - 当有人进入问题/编辑页面时,我计算当前行哈希并将其保存在问题表中的序列化字段“old_data”中。然后在他们保存问题后,我计算新的当前行哈希并将其保存到问题表中的序列化字段“new_data”中。此外,我比较了两个序列化哈希并将差异保存到另一个序列化哈希字段“更改”中。现在要做我的报告,我只查找过去 x 天内更新的问题并输出它们的更改数据。

3) 制作视图 - 我创建了一个与我想要输出的数据相对应的视图(即合并了我拉入报告中的所有数据)。然后我跟踪视图的变化 - 不知何故。我不确定我会怎么做。

我现在倾向于选项 2。

还有其他想法/cmets吗?感谢任何建议 - 最多。

【问题讨论】:

    标签: ruby-on-rails auditing


    【解决方案1】:

    所以,就像您说的,您只想显示时间 x 和时间 y 之间的记录更改,对吗?使用acts_as_audited 插件对我来说似乎很完美,因为您最终会得到一张更改表,对吗?因此,从 Question 到所有这些相关表建立 has_many_through 关联,然后搜索相关更改,其中创建日期在时间 X 之后。这将返回更改列表。从那里,如果需要,您可以将此列表连接回父对象,或者其他任何东西 - 但最终它似乎是一个更合理的搜索方式。毕竟,您不是在寻找相关对象的列表,而是在寻找更改列表,因此拥有更改表似乎是实现这一目标的合理方法?

    【讨论】:

      【解决方案2】:

      嘿,我遇到了类似的问题,请查看this out。如果可以,请使用 Mongoid 或 Mongomapper,嵌入式版本化文档很不错。

      【讨论】:

        【解决方案3】:

        谢谢各位。我最终推出了自己的解决方案,因为我真正需要做的是捕捉对象上调用的各种方法的结果变化,其中一些涉及关联的对象。我对关联对象的兴趣并不像(例如)由于查看几个不同的关联对象而生成的文本字符串那么感兴趣。我已经有了方法来完成所有这些,所以我真的只需要跟踪调用这些方法的结果的变化。

        我看到的所有插件都不能真正简单有效地做到这一点,所以我最终制作了一个名为 states 的表,它只保存了一个序列化的哈希值,其中包含所有这些方法调用的结果。当记录被更改和保存或任何相关的关联对象被更改和保存时,这将被保存。然后我有一些方法可以返回不同保存状态记录之间的差异。它很适合我的需要。非常感谢您的建议。

        【讨论】:

          猜你喜欢
          • 2011-08-28
          • 1970-01-01
          • 1970-01-01
          • 2015-11-15
          • 1970-01-01
          • 2019-10-28
          • 2017-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多