以下是兩個示例代碼。在Rails中採集和採集有什麼區別?
首先一個與collect
:
User.first.gifts.collect(&:id)
第二個與pluck
:
User.first.gifts.pluck(:id)
有沒有在性能上還是其他什麼東西它們之間有什麼區別?
以下是兩個示例代碼。在Rails中採集和採集有什麼區別?
首先一個與collect
:
User.first.gifts.collect(&:id)
第二個與pluck
:
User.first.gifts.pluck(:id)
有沒有在性能上還是其他什麼東西它們之間有什麼區別?
pluck
處於db級別。它只會查詢特定的字段。 See this。
當你這樣做:
User.first.gifts.collect(&:id)
您有加載的所有字段的對象,你只是得到id
由於基於可枚舉的方法。
所以:
如果你只需要id
使用Rails 4,使用ids
:User.first.gifts.ids
如果你只需要使用Rails 4某些領域,使用pluck
:User.first.gifts.pluck(:id, :name, ...)
如果你只需要一個字段使用Rails 3,使用pluck
:User.first.gifts.pluck(:id)
,如果你需要所有領域,用collect
,如果你需要使用Rails 4一些領域,仍然使用pluck
如果您需要Rails 3的某些字段,請使用select
和collect
是的。 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']]
的基本和主要的區別是普呂克適用分貝的水平,並收集得到的所有數據,然後返回記錄到你 當你需要所有記錄使用收集和當幾個領域然後使用採摘
太棒了。非常感謝。 –
我本來應該在同一時間接受答案。計算器給我的錯誤:您可以在9分鐘接受的答案:) –
我明白了,沒有什麼問題,只是提醒一下;) – apneadiving