Mongoid имеет_and_belongs_to_many ассоциации - PullRequest
5 голосов
/ 05 сентября 2011

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

  test "should add a user as a follower when a user follows the group" do                                                                                                                                        
    @cali_group.followers = []                                                                                                                                                
    @user1.followed_groups << @cali_group                                                                                                                                                  
    assert_equal 1, @user1.followed_groups.count
    assert_equal 1, @cali_group.followers.count
  end

Что не получается, потому что @ cali_group.followers это []. Я работал с этим некоторое время, пытался @cali_group.reload. Но похоже, что единственный способ сделать это в моем коде - это обработать оба конца соединения, т.е. @cali_group.followers << @user1. Я могу сделать это в своем коде, если придется.

Модели для polco_group и user здесь: https://gist.github.com/1195048

Полный тестовый код здесь: https://gist.github.com/1195052

Ответы [ 2 ]

1 голос
/ 05 сентября 2011
0 голосов
/ 29 марта 2016

Очень поздно на шоу. Используя Mongoid 4.0.2 здесь. Меня это тоже беспокоит.

Ссылка @sandrew больше не действительна. О подобной проблеме сообщалось здесь: http://github.com/mongodb/mongoid/pull/3604

Обходной путь, который я нашел, был:

@cali_group.followers = []
@cali_group.follower_ids # Adding this line somehow does something to the cache
@user1.followed_groups << @cali_group

Нашли этот обходной путь, добавив before_save в класс Group и наблюдая за self.changes. Без этой строки элемент follower_ids изменится с nil на []. Однако после добавления строки, правильный идентификатор пользователя получен и установлен. Надеюсь, что это поможет любому будущему читателю.

...