Qual é a diferença entre arrancar e recolher em Carris?
o primeiro com collect
:
User.first.gifts.collect(&:id)
O Segundo com pluck
:
User.first.gifts.pluck(:id)
Há alguma diferença entre eles no desempenho ou outra coisa?
3 answers
pluck
está no nível db. Ele só vai questionar o campo em particular. vê isto .
Quando o fizeres:
User.first.gifts.collect(&:id)
Você tem objetos com todos os campos carregados e você simplesmente obter o {[[2]} graças ao método baseado em enumerável.
Então:
Se apenas necessita de
id
com Carris 4, useids
:User.first.gifts.ids
Se apenas necessita de alguns campos com Carris 4, use
pluck
:User.first.gifts.pluck(:id, :name, ...)
Se só precisa de um campo com Carris 3, use.
pluck
:User.first.gifts.pluck(:id)
Se necessitar de todos os campos , use
collect
Se precisar de alguns campos com Carris 4, Utilize
pluck
Se necessitar de alguns campos com Carris 3, utilize
select
ecollect
pluck
converte directamente o resultado de uma base de dados num array
, sem construir objectos ActiveRecord
. Isto significa melhor desempenho para uma consulta grande ou frequentemente em execução.
Além da resposta de @apneadiving, pluck
pode tomar nomes de colunas individuais e múltiplos como argumento:
Client.pluck(:id, :name)
# SELECT clients.id, clients.name FROM clients
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]