[PT-BR] pluck vs. select

Published: (April 30, 2026 at 11:24 PM EDT)
2 min read
Source: Dev.to

Source: Dev.to

pluck

No Rails, temos o pluck, que retorna um array com os valores dos atributos que você selecionou.

Doctor.pluck(:id)
#=> [1, 3, 7, 8, 9, 5]

Se você passa mais de um atributo, o pluck retorna um array de arrays, cada sub‑array contendo os valores dos atributos solicitados:

Doctor.pluck(:id, :updated_at)
#=> [
#     [1, Wed, 23 Jan 2019 11:44:27.924159000 EST -05:00],
#     [3, Tue, 29 Jan 2019 15:47:30.056920000 EST -05:00],
#     [7, Thu, 28 May 2020 19:30:29.238601000 EDT -04:00],
#     [8, Thu, 28 May 2020 19:30:29.251257000 EDT -04:00],
#     [9, Sat, 26 Jun 2021 19:56:41.536687000 EDT -04:00],
#     [5, Tue, 28 Jun 2022 16:49:45.091360000 EDT -04:00]
#   ]

A query gerada busca somente os atributos especificados:

SELECT "doctors"."id", "doctors"."updated_at" FROM "doctors"

select

O select faz a mesma consulta SQL, porém retorna um ActiveRecord::Relation contendo objetos do modelo:

Doctor.select(:id, :updated_at)
#=> #<ActiveRecord::Relation [...]>

Exemplo de log da consulta:

Doctor.select(:id, :updated_at)
#   Doctor Load (0.3ms)  SELECT "doctors"."id", "doctors"."updated_at" FROM "doctors"

Comparação

MétodoRetornoTipo de objeto
pluckArray (ou array de arrays)Array
selectConjunto de registros ActiveRecordActiveRecord::Relation (model objects)

Ambos geram a mesma consulta SQL:

SELECT "doctors"."id", "doctors"."updated_at" FROM "doctors"

A diferença está no formato dos dados retornados: pluck entrega apenas os valores puros, enquanto select entrega instâncias completas do modelo, permitindo acesso a métodos de instância e associações.

0 views
Back to Blog

Related posts

Read more »

I Think Ruby Isn’t Dynamic Enough…

Introduction This is, admittedly, more of a personal ramble than a technical article. For the past few years I have become something of a Crystal believer. Loo...