यह एक "क्यों चीजें इस तरह से काम करती हैं" सवाल के बजाय "मैं नहीं जानता कि यह कैसे करना है" सवाल है ...
इसलिए संबंधित रिकॉर्ड जो आप जानते हैं कि आप उपयोग करने जा रहे हैं, को खींचने के लिए सुसमाचार का उपयोग करना है :include
क्योंकि आपको एक जुड़ाव मिलेगा और अतिरिक्त प्रश्नों का एक पूरा गुच्छा बचना होगा:
Post.all(:include => :comments)
हालाँकि जब आप लॉग देखते हैं, तो कोई जॉइन नहीं हो रहा है:
Post Load (3.7ms) SELECT * FROM "posts"
Comment Load (0.2ms) SELECT "comments.*" FROM "comments"
WHERE ("comments".post_id IN (1,2,3,4))
ORDER BY created_at asc)
यह है एक शॉर्टकट लेने क्योंकि यह एक ही बार में सभी टिप्पणियां खींचती है, लेकिन यह अभी भी एक में शामिल नहीं है (जो क्या सभी दस्तावेज़ कहने लगता)। एकमात्र तरीका जो मुझे मिल सकता है वह :joins
इसके बजाय उपयोग करना है :include
:
Post.all(:joins => :comments)
और लॉग दिखाते हैं:
Post Load (6.0ms) SELECT "posts".* FROM "posts"
INNER JOIN "comments" ON "posts".id = "comments".post_id
क्या मैं कुछ भूल रहा हूँ? मेरे पास आधा दर्जन संघों के साथ एक ऐप है और एक स्क्रीन पर मैं उन सभी से डेटा प्रदर्शित करता हूं। ऐसा लगता है कि 6 व्यक्तियों के बजाय एक जॉइन-एड क्वेरी होना बेहतर होगा। मुझे पता है कि प्रदर्शन-वार यह हमेशा व्यक्तिगत प्रश्नों के बजाय जुड़ने के लिए बेहतर नहीं है (वास्तव में यदि आप समय व्यतीत कर रहे हैं, तो ऐसा लगता है कि ऊपर दिए गए दो व्यक्तिगत प्रश्न जुड़ने की तुलना में तेज़ हैं), लेकिन सभी डॉक्स के बाद मैं पढ़ रहा हूँ मैं :include
विज्ञापित के रूप में काम नहीं करते देख हैरान हूँ ।
हो सकता है कि रेल है प्रदर्शन मुद्दे के जानकार और कुछ मामलों को छोड़कर में शामिल नहीं करता है?
includes
( इसे पढ़ने वाले किसी के लिए)