2012-06-13 54 views
4

我有表usersscores。 這裏有關聯::counter_cache => true用於存儲總和

belongs_to :user #score model 
has_many :scores #user model 

users有一個稱爲scores_count列。在這一列中,我將所有值的總和存儲在表scores中。

我想用這種方式存儲,只保存行數在表scoresscores_count: :counter_cache => true

:counter_cache => true所有scores的總和。有沒有類似的方法來存儲來自表scores的所有值的總和?或者我必須自己執行這個任務?

+0

您可以添加一個回調.. –

回答

4

不需要。您必須自己實施。計數器緩存僅用於存儲關聯記錄的數量。您可以使用Score上的回調來實現它,以更新關聯的User。另請參閱How can I cache a calculated column in rails?

此外,除非每次總結時都有明顯的性能問題,否則請避免使用像這樣的緩存。這只是一件容易出錯而過時的事情。如果你不需要它,這不值得麻煩。

+0

好的,謝謝你的信息。我想問一下 - 在這種情況下用一種方法做得更好(我將新記錄保存到**分數表中,然後我將運行該方法來重新計算**分數中的所有關聯值**表格,並將數量保存到**用戶**表格中)或通過** callback **,如上所述(我還沒有使用回調工作)?哪個變種更好/更快? – user984621

+0

回撥。您可以爲記錄上的任何保存操作設置回調,而不必手動處理每個操作的某些方法。回調是無縫的,不易出錯。 –

+0

很酷,非常感謝! – user984621

5

您可以使用​​寶石。

class Score < ActiveRecord::Base 
    belongs_to :user 
    counter_culture :user, column_name: 'scores_sum', delta_column: 'score_value' 
end 
相關問題