2017-03-01 6 views
2

私は私のモデルの一つではかなりのDB集約型クラスのメソッドを持っています。クラスメソッドの結果セットをキャッシュしますか?

class Page < ApplicationRecord 
    def self.collection_tree 
    pages = [] 
    walk_tree do |page, level| 
     pages << page 
    end 
    pages 
    end 
end 

私は結果をキャッシュしたいと思いますので、この方法の唯一の最初の呼び出しは、DBクエリを呼び出します。

私はこのようにそれを試してみました:

def self.collection_tree 
    return @collection_tree if @collection_tree 

    @collection_tree = [] 
    walk_tree do |page, level| 
    @collection_tree << page 
    end 
    @collection_tree 
end 

しかし、これはランダムに失敗スペックになった - 私が期待どおりに道スペックの間でリセットされないようです。

これをキャッシュする別の方法がありますか?

答えて

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 
と直接キャッシュを使用します
関連する問題