Search code examples
ruby-on-railsrubyrails-activerecord

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?


Solution

  • 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