跟踪班级实例及其关联的变化 - 想法?

时间:2010-07-14 10:07:34

标签: ruby-on-rails auditing

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

我现在要求仅在给定时间段内向问题(或其相关数据)显示更改。我目前正在考虑最好的方法。这是我迄今为止的一些想法,我欢迎任何反馈,想法,建议等。

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

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

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

我现在正倾向于选项2.

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

嘿,我有类似的问题,请检查this out。如果可以的话,可以使用Mongoid或Mongomapper,嵌入式版本的文档很可爱。

答案 2 :(得分:0)

谢谢你们。我最终编写了自己的解决方案,因为我真正需要做的是捕获对象调用的各种方法的结果的变化,其中一些涉及相关对象。我对关联对象并不感兴趣,因为(例如)查看一些不同的关联对象而生成的文本字符串。我已经有了完成所有这些工作的方法,所以我真的需要跟踪调用这些方法的结果的变化。

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