-
Type: Task
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
Using:
- mongoid (~> 4.0.0)
- moped (~> 2.0.1)
Mongo DB:
- 2.6.3 & 2.6.5
NOTE: it worked before upgrading MongoDB. Worked on 2.4.9
Steps to reproduce:
- In a Rails project console, you can run the following script.
class Duplicatable include Mongoid::Document include Mongoid::Timestamps embeds_many :embedded_lists end class EmbeddedList include Mongoid::Document embedded_in :duplicatable embeds_many :embedded_list_items end class EmbeddedListItem include Mongoid::Document embedded_in :embedded_list embeds_many :embedded_list_items field :name, type: String field :sort_index, type: Integer end d = Duplicatable.create list = d.embedded_lists.create list.embedded_list_items.create name: 'first', sort_index: 0 last = list.embedded_list_items.create name: 'second', sort_index: 1 list.reload list_item = list.embedded_list_items.find last.id.to_s list_item.name = "last" list_item.save list_item
The above code sets up the relationships and the data. It then changes the last entry's name from "second" to "last", saves it and displays what the item looks like. It should be something like this...
#=> #<EmbeddedListItem _id: 546289546d61722877040000, name: "last", sort_index: 1>
Now reload the item and you will find that it did not change.
list_item.reload
#=> #<EmbeddedListItem _id: 546289546d61722877040000, name: "second", sort_index: 1>
And instead, it changed the first item in the list (one with a different ID as well).
list.reload
list.embedded_list_items
#=> [#<EmbeddedListItem _id: 546289426d61722877030000, name: "last", sort_index: 0>, #<EmbeddedListItem _id: 546289546d61722877040000, name: "second", sort_index: 1>]
This was verified on an Ubuntu Linux machine against MongoDB 2.6.3 and reproduced on a Mac OSX against MongoDB 2.6.5.
It worked correctly (making the change to the correct item in the embedded list) on the Mac OSX when against MongoDB 2.4.9.
- is duplicated by
-
MONGOID-3696 nested embeds_many doesn't work
- Closed