2013-01-09 135 views
0

我試圖通過緩存數據庫查詢來提高應用程序的性能。這些都是簡單的查詢,因爲我需要加載和緩存所有對象。存儲數據庫查詢時發生低級緩存錯誤

這裏是我的application_controller.rb縮短版:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def show_all 
    load_models 
    respond_to do |format| 
     format.json { render :json => {"items" => @items} 
     } 
    end 
    end 

    protected  
    def load_models 
    @items = Rails.cache.fetch "items", :expires_in => 5.minutes do 
     Item.all 
    end 
    end 
end 

但是當我嘗試並加載這個頁面我得到這個錯誤:

ArgumentError in ApplicationController#show_all 
undefined class/module Item 

我一直在關注低級別的緩存Heroku的指南貼在這裏:https://devcenter.heroku.com/articles/caching-strategies#low-level-caching

任何想法,我可以在這裏做緩存工作?有沒有更好的方法來實現這一點?

回答

0

我通過將編碼的JSON存儲在Rails.cache.fetch而不是原始ActiveRecord對象中解決了此問題。然後,我檢索存儲的JSON,將其解碼並呈現給視圖。完成的代碼如下所示:

def show_all 
    json = Rails.cache.fetch "Application/all", :expires_in => 5.minutes do 
     load_models 
     obj = { "items" => @items } 
     ActiveSupport::JSON.encode(obj) 
    end 

    respond_to do |format| 
     format.json { render :json => ActiveSupport::JSON.decode(json) } 
    end 
    end 

    def load_models 
    @items = Item.all 
    end