2011-10-03 116 views
6

我得到了我的藏品是這樣的:獲取所有的IDS從集合

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

如何我能得到這個項目所有的ID沒有一個循環?我可以使用類似:

hotels.ids ? 

感謝您對試圖hotels.map(&:id)hotels.map{|h| h.id }

回答

17

什麼?

他們都指紅寶石一樣的東西,第一個是更好的給習慣於紅寶石派通常,而第二個是更容易理解,適合初學者。

+1

它應該是'hotels.map(:ID)'。否則,我同意答案 – DanneManne

+0

'hotels.map(&:id)'會更好。編輯:outraced by @DanneManne :-) –

+0

@DanneManne錯字的好處:每次咬我一次:/ – Romain

7

你也可以只拉ID。

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

最客觀,簡單,快速的解決方案。這似乎很明顯,但人們堅持使用可枚舉的方法來處理** everything **。 –

11

如果你只需要使用所有的ID的數組,你應該使用pluck,因爲它使正確的查詢,不必使用任何紅寶石。此外,它不必爲從數據庫返回的每條記錄實例化一個Hotel對象。 (更快)。

Hotel.where(selection: 1).pluck(:id) 
# SELECT hotels.id FROM hotels WHERE hotels.selection = 1 
# => [2, 3]