2013-04-24 7 views
5

मैं खातों से अधिक उपयोगकर्ता है कि संग्रह प्राप्त कर सकते हैं कि की गिनती हो रही है:रेल 3 रिकॉर्ड एक से अधिक सहयोगी रिकॉर्ड (has_many)

Account.group('accounts.id HAVING count(users.id) > 1').joins(:users) 

लेकिन, जैसे ही मुझे कहते हैं। उस ऑब्जेक्ट पर गिनती करें, मुझे एक बड़ा विस्फोट मिलता है:

(0.3ms) SELECT COUNT (*) AS count_all, accounts.id हैविंग गिनती (users.id)> 1 खातों के रूप में "खातों" INNER जॉइन में शामिल हों "उपयोगकर्ता" "उपयोगकर्ता" पर। "Account_id" = "accounts"। "Id" ग्रुप द्वारा ग्रुप। आईडी हैगिंग गिनती (users.id)> 1 ActiveRecord :: स्टेटमेंट इनवालिड: पीजी :: त्रुटि: त्रुटि: वाक्यविन्यास त्रुटि या पास "के रूप में" पंक्ति 1: ... unt_all, गिनती होने (users.id)> 1 खातों के रूप में ... accounts.id

ऐसा लगता है postgres में, वास्तविक क्वेरी मैं चाहता है कि:

select count(*) from (SELECT accounts.id FROM "accounts" INNER JOIN "users" ON "users"."account_id" = "accounts"."id" GROUP BY accounts.id HAVING count(users.id) > 1) as a; 

मैं इसे (या तुलनीय) क्वेरी उत्पन्न करने के लिए सक्रियक्रॉर्ड कैसे प्राप्त कर सकता हूं?

उत्तर

7

सक्रिय रिकॉर्ड गिनती लेने का समर्थन करता है एक विधि के रूप 'होने'। तो आप अपनी क्वेरी इस तरह से कर सकता है:

0

तुम क्यों

User.count(:group => :account_id) यह दिखा एक हैश वापस कर सकती है उपयोगकर्ता मॉडल, जहां उपयोगकर्ता मॉडल से ACCOUNT_ID group_by से इस कोशिश न {: ACCOUNT_ID => COUNT_OF_USERS} उदाहरण के लिए, {1 => 3, 2 => 5, 3 => 2}

अब ACCOUNT_ID के उपयोगकर्ता है 1. एक से अधिक

+1

लेकिन यह है कि संग्रह से अधिक गहरे लाल रंग का बार-बार दोहराना और प्रत्येक value-- पर एक तुलना कर रहे हैं और उस पर तो बुला गिनती की आवश्यकता है। मैं डेटाबेस को गिनती करने का एक तरीका ढूंढ रहा हूं। – patrick

संबंधित मुद्दे