2011-06-30 16 views
6

मैं mongo/mongoid के लिए नया हूं और मैं अपनी साइट टेबल पर एक आत्म संदर्भ संबंध स्थापित करने की कोशिश कर रहा हूं।MongoDB mongoid आत्म संदर्भ संबंध

# sites model 

has_many :child_sites, :class_name => 'Site' 
belongs_to :parent, :class_name => 'Site' 

#controller 

@event = current_site.child_sites.build(params[:site]) 

CURRENT_SITE एक समारोह है कि वर्तमान साइट ऑब्जेक्ट है।

मैं इस त्रुटि मिलती है -

अपरिभाषित विधि `#

के लिए प्रविष्टियों '
+0

सुनिश्चित नहीं है कि आपकी विशिष्ट समस्या क्या है लेकिन यह एक बहुत ही मोंगोडब अनुकूल स्कीमा नहीं है। ध्यान दें कि एक अवधारणा के रूप में "संबंध" मोंगोडब में मौजूद नहीं हैं, इसलिए उपरोक्त कई प्रश्नों के परिणामस्वरूप (प्रत्येक "रिश्ते" को ड्राइवर द्वारा अलग-अलग पूछताछ की जानी चाहिए)। –

+0

सलाह के लिए धन्यवाद, एक मूल साइट बनाने के लिए सबसे अच्छा तरीका क्या है जिसमें एक बच्चा साइट है? – Alex

उत्तर

13

आप निम्न करने के लिए अपने संबंध परिभाषाओं को बदलने की कोशिश कर सकते हैं:

has_many :child_sites, :class_name => 'Site', :cyclic => true 
belongs_to :parent_site, :class_name => 'Site', :cyclic => true 

मुझे नहीं पता पता है कि यह वास्तव में क्या करता है, लेकिन मुझे याद है कि यह Mongoid Google समूह में चर्चा की जा रही है। यदि यह काम नहीं करता है, तो आपको संबंध मैक्रोज़ दोनों पर inverse_of सेट करने का प्रयास करना चाहिए। अधिकांश समय inverse_of सेटिंग नौकरी सही ढंग से करता है।

has_many :child_sites, :class_name => 'Site', :inverse_of => :parent_site 
belongs_to :parent_site, :class_name => 'Site', :inverse_of => :child_sites 

अतिरिक्त प्रश्नों के बारे में, हाँ वहाँ अतिरिक्त प्रश्नों जब भी आप एक साइट या किसी साइट का मूल साइट के child_sites लाने के लिए चाहते हो जाएगा।

आपको मूल साइट पर बाल साइटों को एम्बेड करने पर विचार करना चाहिए, लेकिन इस बात को ध्यान में रखें कि आप बच्चों की साइट को स्टैंडअलोन तरीके से पूछने की क्षमता खो देंगे। आपको हमेशा किसी भी बच्चे साइट को "parent_site> child_sites" के रूप में एक्सेस करना होगा।

दस्तावेज़ के आकार पर 16 एमबी सीमा को ध्यान में रखें, जो पहुंचने में मुश्किल है, लेकिन यदि संभव हो तो माता-पिता के लिए बहुत सी बच्चे साइटें हों और यदि आप टेम्पलेट जानकारी संग्रहीत कर रहे हैं, जैसे एचटीएमएल, सीएसएस इत्यादि। दस्तावेज़ में ही।

4

साइक्लिक मूल रूप से एम्बेडेड दस्तावेज़ों (see user group entry) के लिए लागू किया गया था। mongoid 2.3 पर इस काम के करने के लिए या उच्चतर आप चक्रीय विकल्प हटाने के लिए:

has_many :child_sites, :class_name => 'Site' 
belongs_to :parent_site, :class_name => 'Site' 
संबंधित मुद्दे