1

我有一个属性,它是来自各种其他模型的基于计算值的数据。

我正在寻找一种巧妙的方法来缓存该值,类似于counter_cache但该值通过自定义函数自动更新。我已经在模型中有自定义功能。

如果修改了任何依赖数据,我需要调用此函数。有什么建议么?

4

1 回答 1

2

编辑,根据评论:

好的,所以你有一个 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

显然,如果收到赞的是各种用户活动,而不是用户本身,那么您需要深入挖掘您的关联以从赞中找到用户,但这应该不会太难。

于 2011-12-15T20:39:08.790 回答