简体   繁体   中英

How to get all values of an object in ActiveRecord in Rails?

One can use column_names to get all the columns of a table, but what if one would like to know all the values of a particular instance in ActiveRecord.

For example,

User.column_names
=> ["id", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "tel", "interests", "admin_status", "created_at", "updated_at", "city_id", "profile_image_file_name", "profile_image_content_type", "profile_image_file_size", "profile_image_updated_at"]

User.first
=> #<User id: 1, email: "aatir@jpl.com", tel: "+923223333333", interests: "Hi, I'm interested in coding.", admin_status: "download", created_at: "2016-08-16 22:38:05", updated_at: "2016-08-16 22:38:05", city_id: 2, profile_image_file_name: "Screen_Shot_2016-07-02_at_4.41.32_PM.png", profile_image_content_type: "image/png", profile_image_file_size: 324372, profile_image_updated_at: "2016-08-16 22:38:04">

When first method is called, it returns key-value pairs. What I want is to have only values, is there a single method in ActiveRecord that can do this for us?

You can also use attributes method to get it

User.first.attributes.values
  1. User.first.attributes will return you hash representation of user object

    User.first.attributes { "id" => 1, "email" => "aatir@jpl.com", "tel" => "+923223333333", "interests" => "Hi, I'm interested in coding.", "admin_status" => "download", "created_at" => "2016-08-16 22:38:05", "updated_at" => "2016-08-16 22:38:05", "city_id" => 2, "profile_image_file_name" => "Screen_Shot_2016-07-02_at_4.41.32_PM.png", "profile_image_content_type" => "image/png", "profile_image_file_size" => 324372, "profile_image_updated_at" => "2016-08-16 22:38:04" }
  2. values will return you the values in the Array

    User.first.attributes.values [1, "aatir@jpl.com", "+923223333333", "Hi, I'm interested in coding.", "download", "2016-08-16 22:38:05", "2016-08-16 22:38:05", 2, "Screen_Shot_2016-07-02_at_4.41.32_PM.png", "image/png", 324372, "2016-08-16 22:38:04"]

I'm extending @deepak's answer to assure that the order remains same as it is for column_names , and this is how, I achieved it:

User.first.attributes.values_at *User.column_names

To get just the values, irrespective of the order:

User.first.attributes.values 

只是您可以将 activerecord 转换为 Hash 然后获取如下值:

User.first.as_json.values
Object.first.attributes.values

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM