2010-10-20 12 views
32
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%> 

यह कोड एएससी के रूप में आदेशित संग्रह दिखाता है, लेकिन मैं इस संग्रह को डीईएससी के रूप में आदेश देना चाहता हूं।डीईएससी

मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

53

इससे भी बेहतर, आप अपनी घटना को सॉर्ट करने और इसे अपने प्रस्तुत करने में उपयोग करने के लिए एक दायरा सेट कर सकते हैं।

अपने इवेंट मॉडल में:

scope :desc, order("events.event_at DESC") 

आप Rails3 उपयोग करते हैं, अपने ध्यान में रखते हुए आप बस कर सकते हैं:

<%= render @events.desc %> 
+0

रेल का उपयोग कर Im 2.3.5 :( –

+2

तब कोई समस्या नहीं, बस मेरा उदाहरण अनुकूलित करें:' name_scope: desc,: order => ("घटनाएं .event_at DESC ")' और '<% = प्रस्तुत करें: आंशिक => 'ईवेंट',: संग्रह => @ events.desc%>' – Yannis

+0

मुझे यह कोशिश करते समय त्रुटि त्रुटि मिली। event.rb में मॉडलों में मैंने नाम_स्कोप लिखा : desc,: order => ("events.event_at DESC") और फिर इसे <% = प्रस्तुत करने के लिए कॉल करने का प्रयास किया: partial => 'event',: संग्रह => @ events.desc%> लेकिन मुझे त्रुटि गड़बड़ मिली : #

4

आपके पास किस तरह की ऑब्जेक्ट के आधार पर, आपके पास सॉर्ट फ़ंक्शन करने के विभिन्न तरीके होंगे।

अपने वस्तु एक ActiveRecord है, तो आप इसे नीचे दिए तरीक़े कर सकते हैं:

@events.order('events.event_at DESC') 

यह इससे पहले कि आप उन्हें डेटाबेस से पुनः प्राप्त, अपने SQL क्वेरी के लिए एक ORDER खंड जोड़ देगा प्रविष्टियों छँटाई।

दूसरा समाधान धीमा है, क्योंकि आप अपनी प्रविष्टियों को रूबी में सॉर्ट कर रहे हैं।
लेकिन यदि आप वस्तुओं की एक सरणी में हेरफेर कर रहे हैं, तो यह आपका एकमात्र समाधान है।

@events.sort {|a,b| b.event_at <=> a.event_at } 

सभी घटनाओं के माध्यम से हो जाएगा ताकि पाश, <=> विधि के साथ सबसे बड़ी एक के लिए उनमें से हर एक की जाँच।

आप अंकुरित पर the sort documentation भी देख सकते हैं।

+0

क्षमा करें, लेकिन रूबी और रेल पर एक नौसिखिया हूँ। क्या करता है, बी खड़ा है? क्या आप वास्तविक नामों के साथ एक उदाहरण लिख सकते हैं? पसंदीदा रूप से events_at –

+0

ए और बी सरणी के दो तत्व हैं। आप निर्दिष्ट करते हैं कि आप पहले व्यक्ति से पहले एक चाहते हैं। –

+0

आपका उदाहरण होना चाहिए: <% = प्रस्तुत करना: आंशिक => 'घटना',: संग्रह => @ events.sort {| a, b | ख।event_at <=> a.event_at}%> – Yannis

8

तुम बस पलट सकता क्रमबद्ध संग्रह:

<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %> 

लेकिन जैसा कि यैनिस कहते हैं कि आप सॉर्टिंग को बेहतर तरीके से बंद कर देते हैं क्योंकि आप डेटाबेस से चीज़ों को आदर्श रूप से प्राप्त करते हैं।

+0

इससे यह काम करता है। लेकिन मैं सीखने के लिए अन्य उदाहरणों को आजमा देना चाहता हूं। –

10

रेल 3 सही सिंटैक्स में है:

<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %> 
36

तरह पैरामीटर के साथ desc विधि का उपयोग कर http://guides.rubyonrails.org/active_record_querying.html

@events.order(event_at: :desc) 
+1

यह रेल 3+ के लिए सबसे अच्छा जवाब है क्योंकि यह कच्चे SQL लिखने के बिना डेटाबेस में ऑर्डरिंग करता है। – DaveMongoose

1

आप ऐसा कर सकते हैं पर वर्णन किया।

उदाहरण

@events.desc(:event_at) 

नीचे देखें यह आपको event_at क्षेत्र के अवरोही क्रम में @events दे देंगे।

धन्यवाद।

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