2011-09-05 2 views
5

나는 몽고 이드에 협회를 저장하려고 노력하고 있지만 한쪽에만 일할 수 있습니다. 다음 시험을 치르면.몽고이드 has_and_belongs_to_many associations

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 및 사용자의 모델은 여기에 있습니다 : https://gist.github.com/1195048

전체 테스트 코드는 여기에 있습니다 : https://gist.github.com/1195052

+1

사용자 측에 inverse_of가 설정되어 있지 않아 문제가 발생할 수 있습니다. – rubish

+0

좋은 점은 그 부분을 살펴 보겠습니다 – bonhoffer

+0

흠. . 아직 작동하지 않지만 어떤 경우에도 개선이 필요합니다. – bonhoffer

답변

1

그것은이 될 수 있습니다 https://github.com/mongoid/mongoid/issues/1204

+0

예, 테스트되었고 캐시 문제입니다 – bonhoffer

+1

@sandrew의 링크는 더 이상 유효하지 않습니다. 비슷한 문제가 여기에보고되었습니다. https://github.com/mongodb/mongoid/pull/3604 –

0

매우 늦게 표시합니다. 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를 추가하고 self.changes을 관찰하여이 해결 방법을 발견. 이 줄이 없으면 follower_ids 구성원이 nil에서 []으로 변경됩니다. 그러나 라인을 추가 한 후에는 사용자의 올바른 ID를 수신하고 설정합니다. 희망은 미래의 독자를 돕습니다.

관련 문제