If you want few attributes from a table, instead of instantiating a collection of models and then running a .map over them to get the data you need, its very much economical to use .pluck to pull only the attributes you need as a array.
There would be two benefits in this:
1) SQL performance would be much better
2) Less time and memory would be spent.
Let's take an example as a ruby code:
users = User.all.map { |u| u.email }
users = User.pluck(:email)
So in the case we are using .pluck it would be very much efficient in terms of performance, time and memory.
We can use .pluck across the tables as well. So in first case we saw that we have plucked emails and now we need an array of two-element arrays consisting of the email and the users address, stored in the users table. Our approach then becomes:
users = User.all.map { |u| [u.email, u.user_profile.address]
users = User.includes(:user_education).pluck(:email, :address)
Prefering .pluck to instantiating a collection of ActiveRecord objects and then using .map to build an array of attributes.
.pluck can do more than simply pull attributes on a single table: it can also run SQL functions, pull attributes from joined tables, and shift on to any scope.
0 Comment(s)