जवाबों:
pluckडीबी स्तर पर है। यह केवल विशेष क्षेत्र को क्वेरी करेगा। इसे देखें ।
जब तुम करोगे:
User.first.gifts.collect(&:id)
आपके पास लोड किए गए सभी फ़ील्ड्स के साथ ऑब्जेक्ट हैं और आपको बस idएनुमरेबल पर आधारित विधि के लिए धन्यवाद मिलता है ।
इसलिए:
यदि आपको केवलid रेल 4 की जरूरत है , तो उपयोग करें ids:User.first.gifts.ids
यदि आपको केवल रेल्स 4 वाले कुछ क्षेत्रों की आवश्यकता है, तो उपयोग करें pluck:User.first.gifts.pluck(:id, :name, ...)
यदि आपको रेल 3 के साथ केवल एक क्षेत्र की आवश्यकता है, तो उपयोग करें pluck:User.first.gifts.pluck(:id)
यदि आपको सभी क्षेत्रों की आवश्यकता है , तो उपयोग करेंcollect
यदि आपको रेल 4 के साथ कुछ फ़ील्ड की आवश्यकता है, तब भी उपयोग करें pluck
अगर आपको रेल 3, उपयोग selectऔरcollect
id, तो .idsरेफरी डॉक्टर का उपयोग करें : api.rubyonrails.org/classes/ActiveRecord/…
हाँ। रेल गाइड के अनुसार , वस्तुओं के निर्माण के बिना, pluckडेटाबेस परिणाम को सीधे रूप में परिवर्तित करता है । इसका अर्थ है एक बड़ी या अक्सर चलने वाली क्वेरी के लिए बेहतर प्रदर्शन।arrayActiveRecord
@ माफी के जवाब के अलावा, pluckदोनों एकल और एकाधिक स्तंभ नामों को तर्क के रूप में ले सकते हैं:
Client.pluck(:id, :name)
# SELECT clients.id, clients.name FROM clients
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
यदि कोई ऐसा मामला है जहां आप पुनर्प्राप्त रिकॉर्ड की कुछ विशेषताओं का उपयोग कर रहे हैं। ऐसे मामलों में आपको उपयोग करना चाहिए pluck।
User.collect(&:email)
उपरोक्त उदाहरण में यदि आपको केवल मेमोरी और समय बर्बाद कर रहे हैं तो आपको ईमेल विशेषता की आवश्यकता है। क्योंकि यह डेटाबेस में उपयोगकर्ता तालिका से सभी स्तंभों को पुनर्प्राप्त करेगा, प्रत्येक विशेषताओं के लिए मेमोरी आवंटित करता है (उन विशेषताओं को शामिल करता है, जिनका आप कभी उपयोग नहीं करेंगे)
नोट: pluckउपयोगकर्ता का ActiveRecord_Relation वापस नहीं करता है
pluckकई गुणों के साथ उपयोग नहीं कर सकते हैं , जैसेpluck(:id, :name)?