1
我有一個屬性是來自各種其他模型的基於計算值的數據。如何在類似於counter_cache的Rails 3中緩存計算的屬性?
我在尋找一種流暢的方式來緩存與counter_cache
類似的值,但是通過自定義函數自動更新值。我已經有了模型中的自定義功能。
如果修改了任何相關數據,我需要調用此函數。有什麼建議麼?
我有一個屬性是來自各種其他模型的基於計算值的數據。如何在類似於counter_cache的Rails 3中緩存計算的屬性?
我在尋找一種流暢的方式來緩存與counter_cache
類似的值,但是通過自定義函數自動更新值。我已經有了模型中的自定義功能。
如果修改了任何相關數據,我需要調用此函數。有什麼建議麼?
編輯,基於註釋:
好了,你有一個像模型和用戶模型。把功能在用戶的方法來更新普及,然後就像一個after_create或after_save的(如果它可以創建後更改)回調來觸發它誰收到它的用戶:
class User < ActiveRecord::Base
has_many :likes
def calculate_popularity
update_attribute(:popularity, existing_function(foo))
end
end
class Like < ActiveRecord::Base
belongs_to :user
after_create :update_user_popularity
def update_user_popularity
user.calculate_popularity
end
end
顯然,如果有什麼接收喜歡是各種各樣的用戶活動,而不是用戶本身,您需要通過關聯挖掘以便從Like到達用戶,但這不應該太難。
除了依賴關係之外,還有一個好的基於一系列記錄進行計算。我想我可以通過將記錄捲到counter_cache或其他東西來作弊。假設你打算爲某人計算一個分數,比如他們基於他們在網站上的所有社交數據中收集的喜好程度。任何時候他們得到一個新的喜歡,他們的分數應該上升。我需要的是,如果這個數據集合有變化,請爲這個特定的對象調用這個函數。而從這個描述中,你看到之前保存也不合適。依賴關係不正確。 – 2011-12-15 20:44:20