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_save
和 before_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
模型
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_save
和 before_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
模型