我有一个属性,它是来自各种其他模型的基于计算值的数据。
我正在寻找一种巧妙的方法来缓存该值,类似于counter_cache
但该值通过自定义函数自动更新。我已经在模型中有自定义功能。
如果修改了任何依赖数据,我需要调用此函数。有什么建议么?
我有一个属性,它是来自各种其他模型的基于计算值的数据。
我正在寻找一种巧妙的方法来缓存该值,类似于counter_cache
但该值通过自定义函数自动更新。我已经在模型中有自定义功能。
如果修改了任何依赖数据,我需要调用此函数。有什么建议么?
编辑,根据评论:
好的,所以你有一个 Like 模型和一个 User 模型。将更新流行度的函数放在 User 中的一个方法中,然后在 Like 上的 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
显然,如果收到赞的是各种用户活动,而不是用户本身,那么您需要深入挖掘您的关联以从赞中找到用户,但这应该不会太难。