2011-03-08 10 views
6

मैं बहुत बढ़िया नेस्टेड सेट प्लगइन का उपयोग कर रहा हटाया नहीं जा सकता: https://github.com/collectiveidea/awesome_nested_setरेल - - नेस्ट के रूप में कार्य असंभव कदम, लक्ष्य नोड के अंदर पेड़

और मेरे मॉडल में मैं निम्न कार्य करें:

acts_as_nested_set 
after_save :ensure_max_nestedset_level 
private 

def ensure_max_nestedset_level 
    if self.level > 2 
    self.move_to_child_of(parent.parent) 
    end 
end 

मैं स्तर को गहरे होने से रोकने के लिए ऐसा करता हूं। कोई विचार है कि मुझे यह क्यों मिल रहा है "असंभव कदम, लक्ष्य नोड स्थानांतरित पेड़ के अंदर नहीं हो सकता है।" त्रुटि? अजीब बात यह है कि यह उत्पादन पर होता है लेकिन मैं इसे देव पर दोहराना नहीं कर सकता।

धन्यवाद

+0

यह मेरे साथ भी awesome_nested_set के साथ होता है। मैं देवदार स्टैक रेल पर हेरोकू का उपयोग कर रहा हूं 3.2 –

उत्तर

9

awesome_nested_set संबंध डेटाबेस में श्रेणीबद्ध डेटा संरचना स्टोर करने के लिए प्रयोग किया जाता है। यहाँ अद्भुत लेख हम कैसे

http://www.sitepoint.com/hierarchical-data-database/
http://www.sitepoint.com/hierarchical-data-database-2/

awesome_nested_set भी डेटाबेस में वृक्ष संरचना के भंडारण के लिए उसी तकनीक का उपयोग डेटाबेस में वृक्ष संरचना स्टोर कर सकते हैं कर रहे हैं, और पेड़ में वहाँ होना चाहिए नहीं एक चक्रीय संबंध !!

तो सुनिश्चित करें! नोड्स के बीच कोई चक्रीय माता-पिता का रिश्ता नहीं है। awesome_nested_set जाँच करता है, तो इस कदम चक्रीय संबंध बना सकते हैं यह इस पेड़ में अब अपवाद "Impossible move, target node cannot be inside moved tree."

फेंक होगा उदाहरण

Food 
    |\ Fruit 
    | |\Red 
    | | \Cherry 
    | |\Yellow 
    | | \Banana 
    |\Meat 
    | |\Beef 
     |\Pork 

आप Meet नोड के बच्चे में पूरे Fruit पेड़ स्थानांतरित कर सकते हैं लेकिन आप में Fruit नोड स्थानांतरित नहीं कर सकते Fruit का कोई भी बच्चा क्योंकि यह चक्रीय संबंध बना देगा और पेड़ पर फिर से चलना असंभव होगा।

अब आपके सवाल का वापसी की सुविधा देता है

1-मैं कर गहरी को प्राप्त करने से स्तर को बनाए रखने के लिए आप के रूप में awesome_nested_set एक एकल एसक्यूएल क्वेरी में पूरे सबट्री लोड कर सकते हैं पेड़ के स्तर के बारे में चिंता करने की जरूरत नहीं है इस लिंक 1 देखें कि वह इसे कैसे

2- कोई विचार क्यों मुझे यह "असंभव कदम .." त्रुटि मिल रही है पहले से ही यह समझाया गया है कि आपको यह त्रुटि क्यों मिल रही है। आप

move_possible?

0

आपका डेटा का उपयोग कर दूषित हो सकती है द्वारा किसी भी कदम की जांच करता है, तो इस कदम वैध है जाने से पहले से होने के लिए इस त्रुटि से बचने कर सकते हैं।

जांचें कि आपके एलएफटी मूल्य आपके आरजीटी मूल्यों से कम हैं। मुझे यह त्रुटि एक अन्य नोड के दाईं ओर एक भाई (जो पहले से ही सही जगह पर थी) को स्थानांतरित करने की कोशिश कर रही थी। जब तक मैंने देखा कि डेटा किसी भी तरह से दूषित नहीं हुआ तब तक मैं परेशान था।

5

यह समस्या डेटाबेस में nillft और rgt फ़ील्ड के कारण दिखाई दे सकती है।

अपने rails c में

Model.rebuild! 

चलाने की कोशिश करें यह awesome_nested_set से संबंधित सभी मूल्यों पुनर्गणना होगा।

+1

यह एक अमान्य माता-पिता होने के कारण भी हो सकता है जो मॉडल.rebuild के दौरान उचित एलएफटी और आरजीटी की गणना की रोकथाम करता है! , इसलिए तालिका से उन प्रविष्टियों को हटाने से भी मदद मिलेगी। – thanikkal

2

हमारे पास हमारे डेटाबेस नाम parent_id में एक कॉलम है, जांचें कि यह आपके लिए शून्य नहीं है।

संबंधित मुद्दे