Quelle est la différence entre arracher et recueillir dans les 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 la performance ou quelque chose d’autre?

pluck est au niveau db. Il interrogera uniquement le champ particulier. Voir ça

Quand tu fais:

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

Vous avez des objects avec tous les champs chargés et vous obtenez simplement l’ id grâce à la méthode basée sur Enumerable.

Alors:

  • Si vous n’avez besoin que de l’ id avec Rails 4, utilisez les ids : User.first.gifts.ids

  • Si vous n’avez besoin que de quelques champs avec Rails 4, utilisez pluck : User.first.gifts.pluck(:id, :name, ...)

  • Si vous n’avez besoin que d’un champ avec Rails 3, utilisez pluck : User.first.gifts.pluck(:id)

  • si vous avez besoin de tous les champs, utilisez collect

  • si vous avez besoin de champs avec Rails 4, utilisez toujours pluck

  • Si vous avez besoin de champs avec Rails 3, utilisez select et collect

Oui. Selon les guides Rails , pluck convertit directement un résultat de firebase database en array , sans ActiveRecord objects ActiveRecord . Cela signifie de meilleures performances pour une requête volumineuse ou souvent exécutée.

En plus de la réponse de @ apneadiving, pluck peut prendre à la fois les noms de colonnes simples et multiples comme argument:

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

La différence fondamentale et principale réside dans le fait que Pluck s’applique au niveau de la firebase database et collecte toutes les données, puis vous retourne l’enregistrement lorsque vous avez besoin de tous les enregistrements utilisés et lorsque peu de champs utilisent le pincement.