2010-07-14 45 views
3

我有一個類有很多關聯模型的問題。在我的應用程序的一頁上,我列出了所有當前問題的摘要,以及來自關聯記錄的各種信息。最終這是一個值的散列,然後我只是打印出一個csv風格的行(我將這稱爲'行散列'從hereon)追蹤班級實例及其關聯的變化 - 想法?

我現在有一個要求,只顯示更改問題(或其相關數據)。我目前正在考慮這樣做的最佳方式。這裏有一些想法,我到目前爲止,我會歡迎任何反饋,想法,建議等。

1)方法1 - acts_as_audited 這是我第一次想到,因爲我以前在其他應用程序中使用過。帶有aaa的圖標只是它跟蹤記錄數據的變化(即不關心關聯是否改變)。所以,我也可以審計所有相關記錄,但隨後試圖將通過捆綁不同審計記錄而發生的變化拼湊在一起,聽起來像是一場噩夢。

2)將舊的和新的散列保存到序列化字段中:即 - 當有人轉到問題/編輯頁面時,我計算當前行散列並將其保存在問題表中的序列化字段「old_data」中。然後,他們保存問題後,我計算新的當前行散列並將其保存到問題表中的序列化字段「new_data」。此外,我比較兩個序列化的散列並將差異保存到另一個序列化的散列字段「更改」中。現在做我的報告,我只是尋找在過去x天更新的問題,並輸出他們的變化數據。

3)製作視圖 - 我製作了一個視圖,它對應於我想要輸出的數據(即合併所有數據,我拉入我的報告)。然後我跟蹤視圖的變化 - 不知何故。我不確定我會如何做到這一點。

我現在傾向於選擇2。

其他想法/評論?感謝任何建議 - 最大。

回答

1

所以,就像你說的,你只想顯示時間x與時間y之間變化的記錄,對不對?對於使用acts_as_audited插件的我來說,這看起來很完美,因爲最終會出現一個更改表,對吧?因此,從Question向所有這些相關表創建一個has_many_through關聯,然後搜索相關的更改,其中創建的日期在時間X之後。這將返回一個更改列表。從那裏,你可以將這個列表連接回父對象,如果你需要的話,或者其他任何東西 - 但它最終似乎是一個更合理的搜索。你不是在尋找一個相關對象的列表,畢竟,你正在尋找一個變化列表,所以有一個變化表似乎是一個合理的方式來實現這個目標?

1

嘿,我也有類似的問題,檢查this out。如果可以的話,與Mongoid或Mongomapper一起,嵌入的版本化文檔很甜蜜。

0

謝謝你們。我結束了自己的解決方案,因爲我真正需要做的是捕獲在對象上調用的各種方法的結果中的更改,其中一些涉及關聯對象。我並沒有對關聯的對象感興趣,例如,由於查看幾個不同的關聯對象而生成的文本字符串。我有方法來完成所有這一切,所以我真的只需要跟蹤調用這些方法的結果的變化。

我看到的插件都不能真正做到這一點簡單有效,所以我最終做出了一個名爲狀態表,只持有所有這些方法調用的結果序列化哈希值。當記錄被修改並保存時,或者當任何相關的關聯對象被修改和保存時,這個被保存。然後我有一些方法來返回不同保存的狀態記錄之間的差異。它適合我的需求。無論如何,非常感謝您的建議。