Mohit Jain Mohit Jain - 7 months ago 53
Ruby Question

What is the difference between pluck and collect in Rails?

Here are two sample codes.

First one with

collect
:

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


Second one with
pluck
:

User.first.gifts.pluck(:id)


Is there any difference between them in performance or something else?

Answer

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