Повторяющиеся записи, созданные из Ассоциации - PullRequest
0 голосов
/ 29 октября 2011

Я использую 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') на единицы и удалил aмного среднего кода.

Полный набор кода доступен здесь: https://gist.github.com/1323984

Большинство странных простых вызовов карты могут вызывать проблемы.

    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

Спасибо за любую информацию! После неоднократных попыток я не могу найти способ в терминале дублировать это, поэтому я подозреваю драгоценный камень Изготовление. (Обновление: нетЯ получаю эту ошибку со стандартными монгоидными объектами, поэтому я полностью обвиняю монгоид.)

Тим

1 Ответ

1 голос
/ 12 июля 2012

Я думаю, что проблема может быть просто в том, что вы не толкаете группы на пользователя правильно. Попробуйте использовать concat или по отдельности сгребать их.

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