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?
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 select
and collect