What is the difference between pluck and collect in Rails?
pluck
is on the db level. It will only query the particular field. See this.
When you do:
User.first.gifts.collect(&:id)
You have objects with all fields loaded and you simply get the id
thanks to the method based on Enumerable.
So:
if you only need the
id
with Rails 4, useids
:User.first.gifts.ids
if you only need some fields with Rails 4, use
pluck
:User.first.gifts.pluck(:id, :name, ...)
if you only need one field with Rails 3, use
pluck
:User.first.gifts.pluck(:id)
if you need all fields, use
collect
if you need some fields with Rails 4, still use
pluck
if you need some fields with Rails 3, use
select
andcollect
Yes. According to Rails guides, pluck
directly converts a database result into an array
, without constructing ActiveRecord
objects. This means better performance for a large or often-running query.
In addition to @apneadiving's answer, pluck
can take both single and multiple column names as argument:
Client.pluck(:id, :name)
# SELECT clients.id, clients.name FROM clients
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
The basic and main difference is that Pluck applies on db level and collect get all data and then return record to you when you need all records use collect and when few fields then use pluck