2010-01-07 13 views
37

मुझे पता है मैंने इसे पहले देखा है लेकिन मुझे अब कुछ भी नहीं मिला है। मैं एक निश्चित कॉलम द्वारा एक क्वेरी को समूहबद्ध करना चाहता हूं और यह प्रदर्शित करने में सक्षम हूं कि प्रत्येक समूह में कितने हैं। मैं पहले भाग उतर गया:रेल में समूह और गिनती

@line_items = @project.line_items.all(:group => "device_id") 

इस प्रकार अपनी पंक्ति वस्तु सूचकांक देखने के लिए, जो सिर्फ एक लाइन आइटम प्रदर्शित तालिका है के लिए है। मैं उस तालिका में "गिनती" के लिए कॉलम कैसे बना सकता हूं कि लाइन आइटम को डिवाइस द्वारा समूहीकृत किया गया है?

@line_items = @project.line_items.all(
    :group => "device_id", 
    :select => "device_id, COUNT(*) as count" 
) 

फिर प्रत्येक @line_item एक count विशेषता होगी:

उत्तर

75

आप countline_items पर कर सकते हैं जो आपको device_id और count का आदेश दिया गया हैश वापस कर देगा। कुंजी के रूप में devise_id की

@project.line_items.group(:device_id).count 
+1

यह एक चेतावनी देता है: 'अस्वीकरण चेतावनी: खोज # विकल्पों के साथ संबंध # गणना रद्द कर दी गई है। कृपया एक दायरा बनाएं और फिर इसके बजाय गणना करें। (सी से कहा जाता है: 'गिनती' में :) ' – Chloe

+6

@Chloe - चेतावनी को हटाने के लिए रेल 4 में इसे आज़माएं:' @ project.line_items.group (: device_id) .count' –

8

बस एक :select विकल्प जोड़ने।

+0

मानव संसाधन विकास मंत्री, मैं मेरे विचार में डिबग (@line_items) डाल के साथ सरणियों की सरणी देता है, लेकिन मैं किसी भी मायने रखता है नहीं दिख रहा है, तो मैं डॉन ' मुझे नहीं लगता कि मैं आपको समझ रहा हूँ। मुझे लगता है कि उत्पादन बिल्कुल विकल्प के बिना जैसा ही है। – tladuke

+0

यह वास्तव में काम करता है, लेकिन यदि आपके पास नहीं है: – tladuke

+0

शामिल करें डीबग विधि गिनती नहीं दिखाएगी क्योंकि यह ActiveRecord विशेषता नहीं है, लेकिन प्रत्येक ऑब्जेक्ट पर * एक * गिनती विशेषता है। किसी भी मामले में, चंद्र का समाधान बहुत बेहतर है। –

10

हैश और संबद्ध रिकॉर्ड इस के बाद

@project.line_items.group(:devise_id).count 
3

कुछ

तरह
User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id") 

भी काम कर सकते हैं ...

0

केवल प्लक गिनती के लिए नहीं बल्कि समूह की तुलना में यहां तेजी से होगा

@project.line_items.pluck(:device_id).count 


@project.line_items.pluck(:device_id).uniq.count 
+0

वे समृद्ध विशेषताओं के लिए पूरी तरह अलग परिणाम लौटाएंगे । 'customer_subscriptions.group (:: स्थिति) .count' वापस आ जाएगी: उदाहरण के लिए ' {1 => 6, 2 => 11, 3 => 136, 0 => 30} ' और' customer_subscriptions। प्लक (: स्टेटस)। काउंटर 'केवल 183' – msdundar

+0

सच होगा, फिर यूनिक के बारे में कैसे? @ Project.line_items.pluck (: DEVICE_ID) .uniq.count –

0

मुझे लगता है कि आप इस कोशिश कर सकते हैं भी।

@project.line_items.group(:device_id).pluck("device_id, count(device_id)") 

^^ यह तत्वों 'DEVICE_ID और गिनती'

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