2013-03-24 81 views
0

我在我的應用程序中有很多sum函數。我將所有數據總和轉移到一個單獨的模型中......讓我們稱之爲......總和。這將使得更快地調用這些數字,因爲每當我需要總結許多行時,我不會指定數據庫。軌道總和模型

我想要做的是每次創建或更新某些其他模型時更新總和行(多個屬性)。我試圖通過每個模型使用類方法,但由於某種原因,它不工作。

林想知道我可以創建一個通用的方法,可以從after_create回調調用我選擇的任何模型。總和與一個帳戶相關聯,而不是正在更新的模型。其他與賬戶相關的模型就是那些會碰到總和模型的模型。因此,我可能需要將self.account_id傳遞給回調方法。

像Papertrails版本模型,每次保存另一個模型時都會更新。

回答

1

看看Statistics寶石。

它有一個緩存選項,使用Rails緩存來防止對數據庫的重複聚合調用。

我更喜歡這樣的東西,而不是每次更新屬性時都進行更新。如果您不打算在內存中保存sums型號,那麼您將必須針對sums表激活儘可能多的更新,因爲有實際的更新。

雖然可能會有寫入時間開銷,而不是讀取時間,但統計數據還附帶了其他選項可供優化。

+0

看起來不錯。我會試試看。我猜如果寶石是緩存,那麼比使用單獨的表格更好。該寶石尚未在looong時間更新......有沒有更新的/更好的選擇? – hellion 2013-03-24 11:49:57

+0

你知道你是否可以使用關聯統計? @ user.accounts.statistics(count :: all)。我有很多助手可以計數或總和......比如@ rating.flights.sum(:xc)。將使用靜態寶石使這些總和和計數更有效率? – hellion 2013-03-30 12:03:21

+0

[此示例](https://github.com/acatighera/statistics#reuse-scopes-you-already-have-defined)使用'has_many'關聯的統計信息。那是你的追求?至於效率,恐怕我不能一概而論,這是相當主觀的。到目前爲止,我還沒有任何表現投訴。 – 2013-03-30 14:46:30