Qual é a diferença entre arrancar e recolher em Carris?

Aqui estão dois códigos de amostra.

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?

Author: ekremkaraca, 2012-08-29

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, use ids: 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 selecte collect

 196
Author: apneadiving, 2015-03-29 18:36:25
Sim. De acordo com guias de Carris, 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']]
 21
Author: Numbers, 2014-06-11 10:54:01
A diferença básica e principal é que o Pluck se aplica ao nível do db e recolhe todos os dados e depois devolve-lhe o registo. quando você precisa de todos os registros use coletar e quando poucos campos, em seguida, use pluck
 2
Author: Thorin, 2016-06-29 12:25:46