2014-05-13 3 views
3

У нас есть этот код:Mongoid: Кэширование нетерпеливого Loaded Документы

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, не задев DB. Но теперь, если мы пишем это включает в кэш рельсов ...

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?

FYI мы используем Mongoid 4.

+0

В чем содержание 'Rails.cache.read ('bands')'? это массив массивов? Можете ли вы проверить этот элемент и опубликовать результат? –

+0

@ArthurNeves: Я редактировал вопрос. Благодарим за комментирование. – Charlie

+0

thats супер странный. когда вы делаете 'band.first', он возвращает тот же массив? –

ответ

3

Это выглядит как быть готов вопросом нагрузки на Mongoid .. Вы можете пойти в https://github.com/mongoid/mongoid/issues/new и открыть новый вопрос, так что мы можем работать над исправлением для него, перед выпуском окончательной версии 4.0.0.

спасибо

+0

Ты понял. Благодарю. – Charlie

+0

Ссылка на github: https://github.com/mongoid/mongoid/issues/3643 – Charlie

Смежные вопросы