这是我的数据结构。
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信息?
答案 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