我有一个属性,它是来自其他各种模型的基于计算值的数据。
我正在寻找一种灵活的方法来缓存与counter_cache
类似的值,但是值会通过自定义函数自动更新。我已经在模型中有自定义功能。
如果修改了任何相关数据,我需要调用此函数。有什么建议?
答案 0 :(得分:2)
根据评论编辑:
好的,所以你有一个Like模型和一个User模型。将函数更新为在User中的方法中更新流行度,然后是after_create或after_save(如果它可以在创建后更改)回调on想要为接收它的用户触发它:
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
显然,如果收到喜欢的内容是各种各样的用户活动,而不是用户自己,那么你需要深入了解你的关联以从喜欢中吸引用户,但这不应该太难。< / p>