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

时间:2016-08-17 05:11:47

标签: ruby-on-rails ruby database rails-activerecord

可以使用column_names来获取表的所有列,但如果想知道ActiveRecord中特定实例的所有值,该怎么办。

例如,

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">

调用first方法时,它返回键值对。我想要的是只有值,ActiveRecord中有一个方法可以为我们做这个吗?

4 个答案:

答案 0 :(得分:8)

您也可以使用attributes方法获取

User.first.attributes.values
  1. 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会返回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"]
    

答案 1 :(得分:3)

我正在延伸@surkak的回答,以确保订单与column_names的订单保持一致,这就是我实现它的方式:

User.first.attributes.values_at *User.column_names

答案 2 :(得分:2)

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

User.first.as_json.values

答案 3 :(得分:1)

Object.first.attributes.values