在mongodb中缓存父类

时间:2011-12-08 01:20:29

标签: ruby-on-rails caching mongodb mongoid

这是我的数据结构。

Foo  
  has_many: bar

Bar  
  belongs_to: Foo

我正在尝试为Bar编写一个缓存方法,它只会提取“特色”条目。

def self.get_featured  
  Rails.cache.fetch("featured", :expires_in => 1.day) do  
    self.where(:featured=>true)   
  end  
end

有效。但是,显示该数据的视图也需要诸如此类的信息 featured.foo.title未作为.get_featured方法的一部分进行缓存。

每当我调用类似的东西时,数据库再次被击中,每页发生> 40次,从而导致数据库崩溃。

问题,如何为此条的所有过滤记录缓存过滤后的Bar AND Foo信息?

1 个答案:

答案 0 :(得分:2)

您可以使用mongoid includes通过指定关系名称来急切加载数据。但目前它仅限于1级深度。所以我相信它会急切加载foo和特色,但不确定吧。你可以自己试试

def self.get_featured  
  Rails.cache.fetch("featured", :expires_in => 1.day) do  
    self.includes(:foo,:bar).where(:featured=>true)   
  end  
end

为了使其工作,必须在mongoid.yml中启用Mongoid身份图,如下所示

identity_map_enabled: true