我的一个模型中有一个非常依赖数据库的类方法:
class Page < ApplicationRecord
def self.collection_tree
pages = []
walk_tree do |page, level|
pages << page
end
pages
end
end
我想缓存结果,因此只有对方法的第一次调用才会调用数据库查询。
我这样尝试过:
def self.collection_tree
return @collection_tree if @collection_tree
@collection_tree = []
walk_tree do |page, level|
@collection_tree << page
end
@collection_tree
end
但这导致规格随机失败 - 似乎这并没有像我预期的那样在规格之间重置。
有没有另一种方法来缓存这样的东西?
通过提取方法直接使用缓存
def self.collection_tree
Rails.cache.fetch('collection_tree') do
collection_tree = []
walk_tree do |page, level|
collection_tree << page
end
collection_tree
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句