从Association创建的重复记录

时间:2011-10-29 01:55:57

标签: ruby-on-rails unit-testing mongoid fabrication-gem

我正在使用Mongoid,Rails和Fabrications,并完全失去了这种情况。任何想法都非常感激,但我知道这很复杂。我只想制作一个用户并且只有四个已加入的组,但我一直在加载八个。

以下是我的代码的相关部分

@user1 = Fabricate.build(:registered)
@user1.joined_groups << [common_group,
                             cali_group,
                             ca46,
                             Fabricate(:polco_group, {:name => "Gang of 13", :type => :custom})]

当我运行@user1.joined_groups.size时,我得到4,但当我@user1.joined_groups.map(&:name)时,我得到8条记录:

#<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]>

(我将所有BSON :: ObjectId('4eab3ca5f11aac2701000009')语句替换为1并删除了大量中间代码。

这里提供了完整的代码集:https://gist.github.com/1323984

大多数bizzarre只是简单地调用地图可能会导致问题。

    puts "just created user with these groups:"
    puts @user1.joined_groups.map(&:name)
    puts "then secondly"
    puts @user1.joined_groups.map(&:name)

生成此(!):

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

感谢您的任何见解!经过多次尝试,我无法找到终端复制这个的方法,所以我怀疑Fabrication宝石。 (更新:不,我用标准的mongoid对象得到这个错误,所以我完全归咎于mongoid。)

1 个答案:

答案 0 :(得分:1)

我认为问题可能只是因为您没有正确地将群组推送到用户身上。尝试使用concat或单独铲除它们。

@user1.joined_groups.concat([common_group,
                         cali_group,
                         ca46,
                         Fabricate(:polco_group, {:name => "Gang of 13", :type => :custom})])