2011-01-06 22 views
30

मैं एक controler में इस क्वेरी प्रदर्शन कर रहा हूँ और 'समूह' मॉडल has_many उपयोगकर्ताऑब्जेक्ट्स की विशेषता द्वारा ऑब्जेक्ट्स की सरणी को कैसे सॉर्ट करें?

@group= Group.find(params[:id]) 

@group इस आंशिक रेंडर करने के लिए किया जा रहा है (आंशिक एक तालिका में एक समूह के उपयोगकर्ताओं उदासीनता)

<%= render :partial=>"user_list", :locals=>{:users=>@group.users} %> 

आंशिक रूप से पारित स्थानीय चर 'उपयोगकर्ता' उपयोगकर्ता ऑब्जेक्ट्स की एक सरणी है;

- !ruby/object:User 
    attributes: 
    updated_at: 2011-01-04 21:12:04 
    firstname: Bob 
    lastname: Smith 
    id: "15" 
    group_id: "2" 
    created_at: 2010-11-26 12:54:45 

उपयोगकर्ता सरणी को 'अंतिम नाम' द्वारा क्रमबद्ध कैसे किया जा सकता है? मैंने बिना किसी किस्मत के कई अलग-अलग तरीकों की कोशिश की है। मुझे भ्रमित करने में एक सरणी के अंदर ऑब्जेक्ट विशेषता द्वारा क्रमबद्ध करने का प्रयास कर रहा है। साथ ही, मैं यह नहीं करता हूं कि मैं इसे कैसे कर सकता हूं: क्वेरी में आदेश (कैसे करें: समूह को ऑर्डर न करें लेकिन प्रत्येक समूह के उपयोगकर्ता)?

शायद मैं ऑब्जेक्ट का नाम सही ढंग से ('उपयोगकर्ता') का जिक्र नहीं कर रहा हूं? ऐसा लगता है कि यह काम करना चाहिए होना यह एक 'कोई विधि' त्रुटि पैदा करता है (या एक गतिशील लगातार काम त्रुटि है, तो 'sort_by' के बिना प्रयोग किया जाता है!):

users.sort_by! {|User| User.lastname} 

किसी भी मदद के लिए धन्यवाद।

+3

sort_by! रूबी 1.8.x या रूबी में नहीं है 1.9.1; यह रूबी 1.9.2 में जोड़ा गया था। – carols10cents

उत्तर

27

में है कि मैं एक विधि है कि here से काम करता है पाया। मुझे समझ में नहीं आता कि "&" प्रतीक क्या कर रहा है - शायद यह "ऑब्जेक्ट" के लिए शॉर्टड है क्योंकि मेरे मामले में "lastname" ऑब्जेक्ट का एक विशेषता है जो सरणी बनाता है।

users = users.sort_by &:lastname 

नोट: मैं नहीं करता हूं कि क्यों एक विनाशकारी संस्करण काम नहीं करेगा। यह एक "अपरिभाषित विधि 'sort_by पैदा करता है! # "त्रुटि के लिए:

users.sort_by! &:lastname 
+4

"और" "to_proc" विधि के लिए छोटा हाथ है। प्रतीकों पर, to_proc अनिवार्य रूप से इसे उस विधि को उस नाम पर कॉल करने में परिवर्तित करता है जो कुछ भी पारित होता है। एक छोटा स्पष्टीकरण: http://pragdave.pragprog.com/pragdave /2005/11/symbolto_proc.html (ध्यान दें कि यह बहुत पुराना है, यह 1.9 और ऊपर, आईआईआरसी में अंतर्निहित है, और पुराने संस्करणों में रेल द्वारा जोड़ा गया है) – Groxx

30

देखें http://ariejan.net/2007/01/28/ruby-sort-an-array-of-objects-by-an-attribute/

@users.sort! { |a,b| a.name.downcase <=> b.name.downcase } 
+0

धन्यवाद, मुझे मिला "त्रुटि nil.sort का मूल्यांकन करते समय त्रुटि हुई!" त्रुटि (मैंने 'name' को 'lastname' में बदल दिया)। ऐसा लगता है कि उदाहरण इस बात पर विचार नहीं करता है कि 'अंतिम नाम' उपयोगकर्ता मॉडल की विशेषता है (जहां उपयोगकर्ता उपयोगकर्ता ऑब्जेक्ट्स की एक सरणी है)। – Reno

+0

यदि आपकी त्रुटि "nil.sort!" है, तो समस्या सॉर्ट i.e. @users शून्य का रिसीवर है। पहले इसे हल करें। –

+0

धन्यवाद। @users (या मेरे मामले में 'उपयोगकर्ता') शून्य नहीं है। मुझे पूरा यकीन है क्योंकि उपर्युक्त उदाहरण एक सरणी की वस्तुओं के लिए है और उन सरणी वस्तुओं के अंदर विशेषता नहीं है। इस विधि ने काम किया (जहां मेरा मानना ​​है 'और' ऑब्जेक्ट के लिए खड़ा है): उपयोगकर्ता = users.sort_by और: अंतिम नाम – Reno

15

यह शायद इसलिए है क्योंकि आप |User| मिल गया है जब User एक वर्ग है। एक गैर-इस्तेमाल किया चर नाम करने के लिए इसे बदलने, u तरह की कोशिश करो, प्राप्त करने के लिए:

users.sort_by! {|u| u.lastname} 

पाइप के बीच अवधि, चर प्रत्येक आइटम में संग्रहीत किया जाता का नाम है के रूप में यह माध्यम से चलाता है, के प्रकार के नहीं ऑब्जेक्ट जो आपको मिला है। यह अन्य रूबी ब्लॉक जैसा है, जैसे do || end, या कोई अन्य {||} -स्टाइल ब्लॉक।

+0

धन्यवाद, हालांकि यह काम नहीं करता है। यह एक "अपरिभाषित विधि 'sort_by वापस आ गया!'# वर्ग के लिए: 0xec67978> "eror – Reno

+0

उस बारे में क्षमा करें ^^; सुनिश्चित नहीं है कि मैं कुछ और सुझाव दे सकता हूं, यह कुछ समय हो गया है क्योंकि मैं रूबी/रेल दुनिया में रहा हूं। आपको यह देखने में खुशी हुई कि आपको कुछ काम मिल रहा है, हालांकि – Groxx

+0

@reno आपको एक अपरिभाषित विधि 'sort_by!' मिली है क्योंकि आप किसी ऑब्जेक्ट को सॉर्ट करने का प्रयास कर रहे हैं। 'Sort!' केवल ऑब्जेक्ट्स (जैसे ऑब्जेक्ट्स की सरणी) पर काम करेगा। – adarsh

2

आप में एक आदेश खंड डालने की कोशिश कर सकते "has_many: उन" लाइन आप अपने समूह मॉडल

+0

एक आकर्षण की तरह काम करता है - धन्यवाद – Reno

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

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