2011-09-05 10 views
5

私はmongoidに関連付けを保存しようとしていますが、私は仕事を片付けるだけです。私に次のテストがある場合。Mongoid 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

回避策は:グループクラスでbefore_saveを追加し、self.changesを観察することによって、この回避策が見つかり

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

。この行がなければ、follower_idsメンバーはnilから[]に変わります。ただし、行を追加すると、ユーザーの正しいIDが受信され、設定されます。将来の読者に役立つことを願っています。