How can I have ActiveRecord’s pluck also return the column name for rendering in json?

vee’s answer is good, but I have one caveat. select instantiates a User for every row in the result, but pluck does not. That doesn’t matter if you are only returning a few objects, but if you are returning large batches (50, 100, etc) you’ll pay a significant performance penalty.

I ran into this problem, and I switched back to pluck:

#in user.rb
def self.pluck_to_hash(*keys)
  pluck(*keys).map{|pa| Hash[keys.zip(pa)]}
end

#in elsewhere.rb
User.limit(:10).pluck_to_hash(*%i[id name email created_at])

It’s ugly, but it gets the hash you want, and fast.

I’ve updated it to reflect Mike Campbell’s comment on Oct 11.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)