rails 中的模型缓存

Caching for model in rails

product.rb

  has_many :votes

vote.rb

belongs_to :product

每次,我都在我的索引控制器中使用排序:

index_controller.rb

def index
  @products = Product.all.sort { |m| m.votes.count }
end

所以,我认为缓存每个产品的投票数会很好(在 products table 中创建额外的列 votesCount)?

如果是,我可以在 vote.rb 模型中使用 before_savebefore_delete 回调来执行吗?

或者最佳的练习方法是什么?

请给我一些例子。

我猜你正在寻找 counter_cache

:counter_cache选项可用于更高效地查找所属对象的数量

考虑这些模型:

class Order < ActiveRecord::Base
  belongs_to :customer, counter_cache: true
end

class Customer < ActiveRecord::Base
  has_many :orders
end

通过此声明,Rails 将使缓存值保持最新,然后 return 该值响应 size 方法。

虽然在包含 belongs_to 声明的模型上指定了 :counter_cache 选项,但必须将实际列添加到关联模型中。在上述情况下,您需要将名为 orders_count 的列添加到 Customer 模型