我的一个模型中有一个非常类似数据库的类方法:
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
但这导致规格随机失败 - 似乎这并没有像我预期的那样在规格之间重置。
还有其他方法来缓存这样的东西吗?
答案 0 :(得分:1)
直接在fetch method
中使用缓存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