2011-10-03 12 views
6

से सभी आईडी जाओ मैं इस तरह मेरे संग्रह आइटम मिल गया:एक संग्रह

hotels = Hotel.where('selection = ?', 1).limit(4) 

मैं कैसे एक पाश के बिना इस आइटम के सभी आईडी मिल सकता है?

hotels.ids ? 

धन्यवाद

उत्तर

17

के बारे में hotels.map(&:id) या hotels.map{|h| h.id } की कोशिश कर रहा है: मैं की तरह कुछ का उपयोग कर सकते हैं?

दोनों का मतलब रुबी के लिए एक ही बात है, पहला व्यक्ति आमतौर पर आदी रूबी-इट्स के लिए अच्छा है, जबकि दूसरा व्यक्ति शुरुआती लोगों के लिए समझना आसान है।

+1

यह 'होना चाहिए hotels.map (और: आईडी)'। अन्यथा, मैं – DanneManne

+0

'hotels.मैप (&: आईडी) के उत्तर से सहमत हूं, 'अच्छा होगा। संपादित करें: @DanneManne द्वारा बहिष्कृत :-) –

+0

@DanneManne टाइपो के लिए अच्छा पकड़: मुझे हर बार काटता है:/ – Romain

7

आप बस आईडी को खींच सकते हैं।

hotels.select(:id).where(selection: 1) 
+1

अधिक उद्देश्य, आसान और तेज़ समाधान। यह बहुत स्पष्ट प्रतीत होता है, लेकिन लोग ** सबकुछ ** के लिए गणना करने योग्य तरीकों का उपयोग करने का आग्रह करते हैं। –

11

आप pluck का उपयोग करना चाहिए आप केवल सभी आईडी के साथ एक सरणी की जरूरत है के रूप में यह सही क्वेरी बनाता है और आप किसी भी गहरे लाल रंग का उपयोग करने के लिए नहीं है। इसके अलावा डीबी से लौटाए गए प्रत्येक रिकॉर्ड के लिए होटल ऑब्जेक्ट को तुरंत चालू नहीं करना पड़ेगा। (रास्ता तेजी से)।

Person.ids # SELECT people.id from people 

और जानकारी::

Hotel.where(selection: 1).pluck(:id) 
# SELECT hotels.id FROM hotels WHERE hotels.selection = 1 
# => [2, 3] 
संबंधित मुद्दे