0

我正在使用 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') 语句并删除了很多中间代码。

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

大多数奇怪的简单调用 map 可能会导致问题。

    将“刚刚创建的用户与这些组:”
    将@user1.joined_groups.map(&:name)
    把“然后其次”
    将@user1.joined_groups.map(&:name)

生成这个(!):

刚刚使用这些组创建了用户:
丹科尔
加州
CA46
13人帮
然后其次
丹科尔
加州
CA46
13人帮
丹科尔
加州
CA46
13人帮

感谢您的任何见解!经过反复尝试,我无法在终端找到一种方法来复制它,所以我怀疑是 Fabrication gem。(更新:不,我在使用标准 mongoid 对象时遇到了这个错误,所以我完全责怪 mongoid。)

蒂姆

4

1 回答 1

1

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

@user1.joined_groups.concat([common_group,
                         cali_group,
                         ca46,
                         Fabricate(:polco_group, {:name => "Gang of 13", :type => :custom})])
于 2012-07-12T14:15:51.777 回答