ruby on rails - specific - How can I have ActiveRecord's pluck also return the column name for rendering in json?




rails select specific columns (4)

@andrewCone - It should be like this:

User.limit(:10).pluck_to_hash([:id, :name, :email, :created_at])
def jsontest
   @users = User.all.limit(10)
   render json: @users
end

yields

{
...

"id": 7,
"name": "Sage Smith",
"email": "[email protected]",
"created_at": "2013-10-17T02:29:15.638Z",
"updated_at": "2013-10-17T02:29:15.638Z",
"password_digest": "$2a$10$taHk3udtWN61Il5I18akj.E90AB1TmdL1BkQBKPk/4eZ7YyizGOli",
"remember_token": "118f807d0773873fb5e4cd3b5d98048aef4f6f59",
"admin": false

...
}

But I would like to omit certain certain fields from this API, so I use pluck

def jsontest
  @users = User.all.limit(10).pluck(:id, :name, :email, :created_at) ###
  render json: @users
end

but pluck returns an array of only values, when I would like to have each object's attributes accessible by hash key.

[
...

    7,
    "Sage Smith",
    "[email protected]",
    "2013-10-17T02:29:15.638Z"

...    

]

So how can I effectively pluck the values and their keys?

I realize I could sweep through @users and grab the keys before plucking and recreate the hash, but I'm expecting there to be some convenience method that does exactly what I want.


@girishso's gem is great, but my project is in Rails 3. It doesn't work.

This article is helpful to me, or install pluck_all gem to achieve this.

Usage:

User.limit(10).pluck_all(:id, :name, :email, :created_at)

Fastest way to return hash of users with selected columns is use ActiveRecord::Base.connection.select_all method.

sql = User.select('id, name, email, created_at').limit(10).to_sql
@users = ActiveRecord::Base.connection.select_all(sql)
render json: @users

Use select instead of pluck:

def jsontest
  @users = User.select('id, name, email, created_at').limit(10)
  render json: @users
end




activerecord