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

任何想法我可以在这里做些什么来让缓存工作?有没有更好的方法来实现这一点?

4

1 回答 1

0

我通过存储编码 JSONRails.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
于 2013-01-09T16:46:08.760 回答