2011-09-05 58 views
5

我試圖讓mongoid保存關聯,但我只能讓一方工作。如果我有以下測試。Mongoid has_and_belongs_to_many association

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

嗯。 。 .still不工作 - 但在任何情況下需要改進 – bonhoffer

回答

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更改爲[]。但是,添加該行後,會收到並設置用戶的正確標識。希望對未來的讀者有所幫助。

相關問題