如何在Rails 3中缓存计算属性,类似于counter_cache?

时间:2011-12-15 18:01:57

标签: ruby-on-rails-3 caching counter-cache

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

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

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

1 个答案:

答案 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>