2009-08-26 14 views
7

मैं DataMapper का उपयोग कर रहा हूं, रूबी के लिए ओपन सोर्स ओआरएम, और मेरे पास खुजली है, मैं खरोंच करना चाहता हूं। फिलहाल, डेटामैपर सामरिक उत्सुक लोडिंग (एसईएल) का उपयोग कई से अधिक रिश्तों के लिए कर सकता है, लेकिन कई से ज्यादा नहीं, जहां एन + 1 प्रश्न होते हैं। मैं इस काम को सही तरीके से बनाने के साथ चारों ओर हैक करना चाहता हूं, लेकिन मुझे यह नहीं पता कि यह कहां करना है। तो दो भाग प्रश्न:सामरिक उत्सुक डाटामैपर में कई से अधिक संबंधों के लिए लोड हो रहा है?

  1. मैं परीक्षण सूट कैसे चला सकता हूं ताकि यह असफल होने के लिए दिखाएगा (एनबी। अभी सभी चश्मा जो विफल होने चाहिए लंबित के रूप में चिह्नित हैं)?
  2. एसईएल एक से कई रिश्तों के लिए कहां और कैसे लागू किया जाता है?

    /lib/dm-core/associations/relationship.rb

    # Eager load the collection using the source as a base 
        # 
        # @param [Collection] source 
        # the source collection to query with 
        # @param [Query, Hash] query 
        # optional query to restrict the collection 
        # 
        # @return [Collection] 
        # the loaded collection for the source 
        # 
        # @api private 
        def eager_load(source, query = nil) 
        targets = source.model.all(query_for(source, query)) 
    
        # FIXME: cannot associate targets to m:m collection yet 
        if source.loaded? && !source.kind_of?(ManyToMany::Collection) 
         associate_targets(source, targets) 
        end 
    
        targets 
        end 
    

    ./lib/dm-core/associations/:

उत्तर

0

दूसरे प्रश्न के लिए, आप कोड में गोता की कोशिश कर सकते one_to_many.rb:

def lazy_load(source) 
     return if loaded?(source) 

     # SEL: load all related resources in the source collection 
     if source.saved? && (collection = source.collection).size > 1 
     eager_load(collection) 
     end 

     unless loaded?(source) 
     set!(source, collection_for(source)) 
     end 
    end 
+0

वाह, 2½ साल और यह अभी भी एक फिक्स है! क्या परीक्षण कम से कम ठीक से विफल हो जाते हैं? –

+0

दरअसल, मैं डेटामैपर के साथ विकास नहीं कर रहा हूं, मेरी इच्छा है कि मेरे पास कोई समय न हो। शायद इस सवाल को डेटामैपर समूह या आईआरसी में पूछा जा सकता है। – CodeGroover

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