Ruby on rails 在mongodb中缓存父类

Ruby on rails 在mongodb中缓存父类,ruby-on-rails,caching,mongodb,mongoid,Ruby On Rails,Caching,Mongodb,Mongoid,这是我的数据结构 Foo has_many: bar Bar belongs_to: Foo 我正在尝试为Bar编写一个缓存方法,该方法将只提取“特色”条目 这很有效。但是,显示此数据的视图也需要以下信息: featured.foo.title,它不是作为.get\u featured方法的一部分缓存的 每次我调用类似的东西时,数据库都会再次被命中,这种情况每页发生>40次,从而导致数据库稍微内爆 问题,如何缓存此栏的所有筛选记录的筛选栏和Foo信息?您可以使用mongoid

这是我的数据结构

Foo  
  has_many: bar

Bar  
  belongs_to: Foo
我正在尝试为Bar编写一个缓存方法,该方法将只提取“特色”条目

这很有效。但是,显示此数据的视图也需要以下信息:
featured.foo.title
,它不是作为.get\u featured方法的一部分缓存的

每次我调用类似的东西时,数据库都会再次被命中,这种情况每页发生>40次,从而导致数据库稍微内爆

问题,如何缓存此栏的所有筛选记录的筛选栏和Foo信息?

您可以使用mongoid通过指定关系名称来加载数据。但目前它仅限于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

我试试看。非常感谢。这似乎本身就起作用了,但对我安排事情的方式不起作用。此方法应将数据拉入“@featured”变量,然后使用:collection=>“@featured”呈现部分。然而,当我尝试这样做时,我得到了一个无法修改冻结对象的错误。我想知道这是否是因为我在这些对象上有视图缓存。我们将尝试不同的方法。
identity_map_enabled: true