2011-09-05 11 views
5

मैं संघों को बचाने के लिए मोंगोइड प्राप्त करने की कोशिश कर रहा हूं, लेकिन मैं केवल काम करने के लिए एक तरफ प्राप्त कर सकता हूं। अगर मेरे पास निम्न परीक्षण है।Mongoid has_and_belongs_to_many एसोसिएशन

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 से [] में परिवर्तन करता है। हालांकि लाइन जोड़ने के बाद, उपयोगकर्ता की सही आईडी प्राप्त और सेट की जाती है। उम्मीद है कि भविष्य में पाठक की मदद करता है।