3

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

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

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

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

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

我现在倾向于选项2。

还有其他想法/意见吗?感谢任何建议 - 最大。

4

3 回答 3

1

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

于 2010-07-21T12:22:39.050 回答
1

嘿,我有类似的问题,看看这个。如果可以,请使用 Mongoid 或 Mongomapper,嵌入式版本化文档很不错。

于 2010-07-22T15:13:46.110 回答
0

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

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

于 2010-07-23T09:21:07.690 回答