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