आप दो काम करते हैं:
- उपयोगकर्ताओं को एप्लिकेशन में फ़िल्टर करने के बजाय db क्वेरी से फ़िल्टर करें
-
संपूर्ण उपयोगकर्ता वस्तुओं के बजाय केवल डीबी से आपको आवश्यक फ़ील्ड प्राप्त करें (मान लीजिए कि आपके पास उपयोगकर्ता में कुछ अन्य सामान है, जिसे आपने यहां संक्षिप्तता के लिए छोड़ दिया है)
Competitor = Struct.new(:html_url, :description, :user) competitors = [] User.where('watchlists.tags_array' => %w[ruby web framework]). only(:nickname, :watchlists).each do |u| u.watchlists.where(:tags_array => %w[ruby web framework]).each do |wl| competitors << Competitor.new(wl.html_url, wl.description, u.nickname) end end
पुनश्च:शायद आप map
का उपयोग नहीं करना चाहते हैं User.all
. पर , यदि आपके पास बहुत से भारी उपयोगकर्ता दस्तावेज़ हैं, तो इसके लिए बहुत अधिक मेमोरी की आवश्यकता होगी। साथ ही, आप मैप किए गए उपयोगकर्ताओं का उपयोग नहीं कर रहे हैं, बल्कि competitors
. में परिणाम एकत्रित कर रहे हैं अपने आप को व्यवस्थित करें, इसलिए each
ठीक काम करना चाहिए।