2012-07-04 20 views
5

अब मैं एक समस्या बताऊंगा जो अक्सर नहीं होता है, लेकिन अभी भी बहुत बुनियादी है। सक्रिय रिकॉर्ड में लिंक्ड सूचियां। तो अबरेल सक्रिय ActiveRecord मॉडल लिंक्ड सूची

class Child < ActiveRecord::Base 
    belongs_to :parent 
    belongs_to :next, :class_name => 'Child', :foreign_key => 'next_id' 
    belongs_to :previous, :class_name => 'Child', :foreign_key => 'previous_id' 
end 

हम एक माता पिता के सभी बच्चों प्राप्त कर सकते हैं:: जहाँ तक मैं अब कर रहा हूँ, हम मॉडल में दो संघों की जरूरत प्रश्न के

children = Child.where("parent_id = ?", parent_id) 

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

+0

बच्चे? बच्चे – Maysam

उत्तर

2

resort और ranked-model रत्न अन्य विकल्प हैं। पहला व्यक्ति लिंक किए गए सूचियों के समान दृष्टिकोण का उपयोग करता है। दूसरा स्थान स्थिति विशेषता का उपयोग करता है।

+0

अंत में हम रैंकिंग मॉडल का उपयोग कर समाप्त हो गए –

1

आपको शायद रेल acts_as_list मणि का उपयोग करना चाहिए। यह सूची में आइटम की स्थिति संग्रहीत करता है, और यहां तक ​​कि सूचियों और belongs_to के लिए मूल ऑब्जेक्ट्स तक स्कॉप्स भी संग्रहीत करता है। यह आपको सभी तत्वों से पूछताछ करने और फिर सही तरीके से सॉर्ट करने की अनुमति देकर इस समस्या को हल करेगा।

+1

विचार मेरे दिमाग को भी पार कर गया, लेकिन act_as_list आपको एक लिंक-सूची का प्रमुख लाभ नहीं देता - सस्ता सम्मिलन और मनमानी स्थानों से हटाने। – Chowlett

+0

मणि act_as_list को जानना अच्छा है (क्योंकि अब तक, मेरे पास यह कार्यान्वयन स्वयं ही किया गया था) लेकिन वास्तव में यही वह है जिसे मैं दूर करना चाहता हूं .... यदि कोई ऑब्जेक्ट हटाना है, तो मैं बस पिछले के गुणों को बदलना चाहता हूं और अगला मॉडल, और स्थिति गुण –

+1

बदलने वाली सैकड़ों पंक्तियों से गुजरना नहीं है आप 'नष्ट' विधि को ओवरराइड कर सकते हैं और इसे बना सकते हैं ताकि यह पड़ोसियों के गुणों को अपडेट कर सके। – Draiken

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