Mongoid:缓存渴望加载的文档

时间:2014-05-13 16:00:29

标签: ruby-on-rails caching mongoid

我们有这段代码:

class Band
  include Mongoid::Document
  has_many :albums
end

class Album
  include Mongoid::Document
  belongs_to :band
end

@bands = Band.includes(:albums).entries

这很棒,因为现在我可以在不点击数据库的情况下运行@bands.first.albums。 但现在,如果我们将这包括写入rails cache ...

Rails.cache.write('bands', @bands) 

...然后我们读取缓存。

bands = Rails.cache.read('bands')

这会返回一个乐队文档数组......

[#<Band _id: 536a53c969702d208f240000, created_at: 2014-05-07 15:39:53 UTC, updated_at: 2014-05-08 15:55:29 UTC, name: "Pink Floyd", fan_count: 394857, #<Band _id: 536adf2a69702d1574130000, created_at: 2014-05-08 01:34:34 UTC, updated_at: 2014-05-08 01:35:40 UTC, name: "Tool", fan_count: 2958394, #<Band _id: 536bcad169702d743e1e0000, created_at: 2014-05-08 18:20:01 UTC, updated_at: 2014-05-08 18:27:10 UTC, name: "My Morning Jacket", fan_count: 3945734]

...然后我们无法获得专辑。

bands.first.albums

NoMethodError: undefined method 'albums' for #<Array:0x00000104df50c0>

是否有一种特殊的方法可以使用Rails或Mongoid缓存这些预先加载的文档?

仅供参考我们使用的是Mongoid 4。

1 个答案:

答案 0 :(得分:4)

看起来好像是Mongoid上的一个急切的加载问题。你可以去https://github.com/mongoid/mongoid/issues/new并打开一个新的问题,所以我们可以在发布最终的4.0.0版本之前修复它。

感谢