-
Type: Task
-
Resolution: Done
-
Affects Version/s: None
-
Component/s: None
I have an <code>after_create</code> callback for one of my embedded models which updates data in the model (well, it queues up a background job but in dev/test it all happens in serial). When the identity map is enabled, the data does not persist if I <code>concat</code> or <code><<</code> the embedded model into the parent but does persist when I use <code>create</code>.
Example:
class Book include Mongoid::Document embeds_many :pages end class Page include Mongoid::Document embedded_in :book field :text after_create :update_something def update_something update_attributes(:text => "test") end end # Ensure that we have an empty identity map Mongoid::IdentityMap.clear Book.destroy_all b = Book.create b.pages << Page.new b.pages # => [#<Page _id: ...>] # Clear out the identity map to ensure the next find call hits the database Mongoid::IdentityMap.clear Book.find(b.id).pages # => [] # would have expected this to contain a Page
If I change <code>b.pages << Page.new</code> to <code>b.pages.create</code>, everything works fine. Alternatively, I can call <code>Mongoid::IdentityMap.clear</code> in the callback and it'll work regardless of how the create occurs.
Using Mongoid 2.3.0.