2012-08-29 32 views

回答

179

pluck處於db級別。它只會查詢特定的字段。 See this

當你這樣做:

User.first.gifts.collect(&:id) 

您有加載的所有字段的對象,你只是得到id由於基於可枚舉的方法。

所以:

  • 如果你需要id使用Rails 4,使用idsUser.first.gifts.ids

  • 如果你需要使用Rails 4某些領域,使用pluckUser.first.gifts.pluck(:id, :name, ...)

  • 如果你需要一個字段使用Rails 3,使用pluckUser.first.gifts.pluck(:id)

  • ,如果你需要所有領域,用collect

  • ,如果你需要使用Rails 4一些領域,仍然使用pluck

  • 如果您需要Rails 3的某些字段,請使用selectcollect

+0

太棒了。非常感謝。 –

+0

我本來應該在同一時間接受答案。計算器給我的錯誤:您可以在9分鐘接受的答案:) –

+0

我明白了,沒有什麼問題,只是提醒一下;) – apneadiving

20

是的。 According to Rails guides,pluck直接將數據庫結果轉換爲array,而不構建ActiveRecord對象。這意味着對於大型或經常運行的查詢來說性能更好。

除了@ apneadiving的回答,pluck可以採取單個和多個列名作爲參數:

Client.pluck(:id, :name) 
# SELECT clients.id, clients.name FROM clients 
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']] 
2

的基本和主要的區別是普呂克適用分貝的水平,並收集得到的所有數據,然後返回記錄到你 當你需要所有記錄使用收集和當幾個領域然後使用採摘