131 votes

Quelle est la difference entre pluck et collect in Rails?

Voici deux exemples de codes.

Premier avec collect :

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

Deuxième avec pluck :

 User.first.gifts.pluck(:id)
 

Y a-t-il une différence entre leur performance ou autre chose?

244voto

apneadiving Points 64660

pluck sur le niveau en db. Il interrogera uniquement le champ particulier. Voir cette.

Lorsque vous faites:

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

Vous avez des objets avec tous les champs chargé et vous tout simplement obtenir l' id grâce à la méthode basée sur Énumérable.

Donc:

  • si vous avez seulement besoin de l' id, utilisez pluck

  • si vous avez besoin de tous les champs, collect

  • si vous avez besoin de quelques champs, selectet collect

33voto

Numbers Points 543

Oui. Selon les guides Rails , pluck convertit directement le résultat d'une base de données en array , sans construire d'objets ActiveRecord . Cela signifie de meilleures performances pour une requête volumineuse ou souvent en cours d'exécution.

En plus de la réponse de @apneadiving, pluck peut prendre à la fois les noms de colonne simples et multiples en tant qu'argument:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X