简体   繁体   English

如何在Rails中的ActiveRecord中获取对象的所有值?

[英]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.可以使用column_names来获取表的所有列,但是如果想知道 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.first方法被调用时,它返回键值对。 What I want is to have only values, is there a single method in ActiveRecord that can do this for us?我想要的是只有值,ActiveRecord 中是否有一个方法可以为我们做到这一点?

You can also use attributes method to get it您也可以使用attributes方法来获取它

User.first.attributes.values
  1. User.first.attributes will return you hash representation of user object User.first.attributes将返回user对象的哈希表示

    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 values将返回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:我正在扩展@deepak 的答案,以确保顺序与column_names的顺序保持相同,这就是我实现它的方式:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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