मैं पैरेंट ऑब्जेक्ट के साथ एक साथ संघों पढ़ने एक instantiated ऑब्जेक्ट से एक संघ उत्सुक लोड करने के लिए कोशिश कर रहा हूँ, यानी बजाय के लिए 4 उत्सुक लोड ...रेल एक वस्तु
User.includes(:characters).first
... यह स्थगित जब तक मैं तय यह वास्तव में आवश्यक है और इस तरह कुछ करना:
u = User.first
# Other stuff ...
u.eager_load(:characters)
रेल 3 मैं इस विधि के साथ ActiveRecord बढ़ाया में:
def eager_load(*args)
ActiveRecord::Associations::Preloader.new(self, *args).run
end
और यह ठीक काम किया। 4 इस हिस्से कुछ बदल रेल और मैं करने के लिए विधि अपडेट:
def eager_load(*args)
ActiveRecord::Associations::Preloader.new.preload(self, *args)
end
दुर्भाग्य से, यह अब कुछ अजीब है। एक नज़र डालें:
2.1.2 :001 > u = User.first
[2015-01-06 23:18:03] DEBUG ActiveRecord::Base : User Load (0.3ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
=> #<User id: 1, ...>
2.1.2 :002 > u.eager_load :characters
[2015-01-06 23:18:07] DEBUG ActiveRecord::Base : Character Load (0.2ms) SELECT `characters`.* FROM `characters` WHERE `characters`.`user_id` IN (1)
[2015-01-06 23:18:07] DEBUG ActiveRecord::Base : Character Load (0.3ms) SELECT `characters`.* FROM `characters`
[2015-01-06 23:18:07] DEBUG ActiveRecord::Base : Character Load (0.2ms) SELECT `characters`.* FROM `characters`
=> [#<ActiveRecord::Associations::Preloader::HasMany:0x00000007c26d28 @klass=Character(id: integer, ...), @owners=[#<User id: ...], @reflection=#<ActiveRecord::Reflection::HasManyReflection:0x0000000496aa60 @name=:characters, ...(LOTS of stuff here)...]
नोट विशेष रूप से सभी रिकॉर्डों का डबल चयन नोट करें। क्या मैं इस व्यवहार या किसी अन्य विधि को ठीक करने का कोई तरीका है जो मैं चाहता हूं?
आपके उदाहरण में, आप मूल वस्तु के साथ एसोसिएशन को एक साथ क्यों नहीं पढ़ना चाहते हैं? और आप केवल 'यू .characters' क्यों कह सकते हैं - क्या यह केवल पात्रों को प्राप्त करने के मामले को पूरा करेगा जब आपको उनकी आवश्यकता होगी? – Nona
यह केवल समस्या का प्रदर्शन करने के लिए था। मैं एन + 1 प्रश्नों को रोकने के लिए गहरी संरचना (उदा।'characters: {आइटम:: विशेषताएँ} ') को प्रीलोड करना चाहूंगा। –
मैं उपयोग के मामले को समझ नहीं सकता जहां 'शामिल है (वर्ण: {आइटम:: विशेषताएँ}) 'पर्याप्त नहीं है? – omarvelous