I am using Mongoid, Rails and Fabrications and at a total loss with how this is happening. Any thoughts very appreciated, but I know this pretty complicated. I just want to fabricate a user and have only four joined groups, but I keep getting eight loaded.
Here is the relevant section of my code
@user1 = Fabricate.build(:registered)
@user1.joined_groups << [common_group, cali_group, ca46, Fabricate(:polco_group, {:name => "Gang of 13", :type => :custom})]
When I run @user1.joined_groups.size
I get 4, but when I do @user1.joined_groups.map(&:name)
, I get 8 records:
#<PolcoGroup _id: 1 ... member_ids: [], follower_ids: []> #<PolcoGroup _id: 1 ... member_ids: [], follower_ids: []> #<PolcoGroup _id: 1 ... member_ids: [], follower_ids: []> #<PolcoGroup _id: 1 ... member_ids: [], follower_ids: []> #<PolcoGroup _id: 1 ... member_ids: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], follower_ids: [1, 1]> #<PolcoGroup _id: 1 ... member_ids: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], follower_ids: [1, 1]> #<PolcoGroup _id: 1 ... member_ids: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], follower_ids: [1, 1]> #<PolcoGroup _id: 1 ... member_ids: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], follower_ids: [1, 1]>
(where i have replaced all BSON::ObjectId('4eab3ca5f11aac2701000009') statements with ones and removed a lot of the middle code.
The full set of code is available here: https://gist.github.com/1323984
Most bizzarre simply calling map might be causing the problem.
puts "just created user with these groups:" puts @user1.joined_groups.map(&:name) puts "then secondly" puts @user1.joined_groups.map(&:name)
Generates this (!):
just created user with these groups: Dan Cole CA CA46 Gang of 13 then secondly Dan Cole CA CA46 Gang of 13 Dan Cole CA CA46 Gang of 13
Thanks for any insight! After repeated attempts, I can't figure out a way in terminal to duplicate this, so I am suspecting the Fabrication gem. (Update: nope, I get this error with standard mongoid objects, so I am totally blaming mongoid.)
Tim
I think the problem might simply be that you are not pushing the groups onto the user correctly. Try using
concat
or separately shoveling them.