मैं ऐसे ऐप पर काम कर रहा हूं जो सदस्यों को एक सर्वेक्षण करने की अनुमति देता है (सदस्य के पास प्रतिक्रिया के साथ कई रिश्ते हैं)। प्रतिक्रिया सदस्य_आईडी, question_id, और उनके उत्तर रखती है।रेल 'सक्रिय' के साथ सक्रिय रिकॉर्ड पूछताछ एसोसिएशन
सर्वेक्षण सभी या कुछ भी सबमिट नहीं किया गया है, इसलिए यदि उस सदस्य के लिए प्रतिक्रिया तालिका में कोई रिकॉर्ड हैं तो उन्होंने सर्वेक्षण पूरा कर लिया है।
मेरा सवाल है, मैं नीचे दी गई क्वेरी को फिर से कैसे लिखूं ताकि यह वास्तव में काम करे? एसक्यूएल में यह EXISTS कीवर्ड के लिए एक प्रमुख उम्मीदवार होगा।
def surveys_completed
members.where(responses: !nil).count
end
पहला विकल्प इस बहिष्करण नोटिस http://pastebin.com/KbsNiqLy दिया। दूसरे ने 68 बार एक ही रिकॉर्ड लौटाए क्योंकि उनके 68 प्रश्न हैं इसलिए मैंने इसे इस तरह संशोधित किया: members.joins (: प्रतिक्रियाएं) .uniq.count – Lee
बहिष्करण नोटिस से बचा नहीं जा सकता है क्योंकि हमें एक स्ट्रिंग टाइप करने की आवश्यकता है कहते हैं "पूर्ण नहीं है" (जब तक आप रेल 4 का उपयोग नहीं करते हैं तब तक शुद्ध ActiveRecord में इसका अनुवाद करना संभव नहीं है)। मैं एक सेकंड @lee – MrYoshiji
में तीसरे स्थान पर रखूंगा, मैंने बहिष्करण नोटिस में और अधिक देखा, और यह किया: members.includes (: प्रतिक्रियाएं)। कहीं भी ('प्रतिक्रियाएं। नल नहीं है')। संदर्भ (प्रतिक्रियाएं)। गिनती है और यह भी काम करता है। तो अब यह एक सवाल है कि "सर्वश्रेष्ठ" तरीका – Lee