2011-09-05 14 views
5

Staram się zdobyć mongoid, aby uratować stowarzyszenia, ale mogę uzyskać tylko jedną stronę do wykonania. Jeśli mam następujący test.Mongoid has_and_belongs_to_many asocjacje

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 

To się nie udaje, ponieważ @ cali_group.followers jest []. Pracowałem z tym przez jakiś czas, wypróbowałem @cali_group.reload. Wygląda jednak na to, że jedynym sposobem na zrobienie tego w moim kodzie jest praca na obu końcach połączenia, czyli @cali_group.followers << @user1. Mogę to zrobić w moim kodzie, jeśli będę musiał.

Wzory polco_group i użytkownika są tutaj: https://gist.github.com/1195048

Pełny kod test jest tutaj: https://gist.github.com/1195052

+1

Nie masz opcji: inverse_of po stronie użytkownika, może to powodować problemy. – rubish

+0

Dobra rada, zajrzę do tego – bonhoffer

+0

hmm. . .still nie działa - ale potrzebne jest jakiekolwiek usprawnienie w każdym przypadku – bonhoffer

Odpowiedz

0

bardzo późno do pokazu. Używanie Mongoid 4.0.2 tutaj. Problem także mnie niepokoi.

Łącze @sandrew nie jest już ważne. Podobny problem odnotowano tutaj: http://github.com/mongodb/mongoid/pull/3604

Rozwiązaniem, które znalazłem:

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

Znaleziony tego obejścia dodając before_save w klasie grupy i obserwując self.changes. Bez tej linii element follower_ids zmienia się z nil na []. Jednak po dodaniu linii otrzymujemy i ustawiamy prawidłowy identyfikator użytkownika. Nadzieja, która pomaga każdemu przyszłemu czytelnikowi.