This blog is part of our Rails 6.1 series.

Rails 6.1 simplifies retrieving values of attributes on the Active Record model instance by adding the values_at attribute method. This is similar to the values_at method in Hash and Array.

Let’s check out an example of extracting values from a User model instance.

class User < ApplicationRecord
  def full_name
    "#{self.first_name} #{self.last_name}"
  end
end

 >> user = User.new(first_name: 'Era', last_name: 'Das' , email: 'era@gmail.com')

=> User id: nil, first_name: "Era", last_name: "Das", created_at: nil, updated_at: nil, email: "era@gmail.com", password_digest: nil

Before Rails 6.1

As shown below using values_at for full_name, which is a method, returns nil.

>> user.attributes.values_at("name", "full_name")
=> ["Era", nil]

After changes in Rails 6.1

Rails 6.1 added the values_at method on Active Record which returns an array containing the values associated with the given methods.

>> user.values_at("name", "full_name")
=> ["Era", "Era Das"]

Check out the pull request for more details.