The proposed method has more benefit when plucking multiple columns. Of
course, you can still do pluck(:first, :last, :dob).map {|e| {first: e[0],
last: e[1], dob: e[2]} }, but I guess that's a little cumbersome and
smelly. I'm not arguing the benefit – small benefit IMO – is worth the cost
of adding and maintaining for years, but I do see its convenience.

-Al

On Thu, Jun 25, 2015 at 5:39 PM, Ryan Bigg <[email protected]> wrote:

> What is the benefit of this method?
>
> You can pluck(:firstname).map { |e| { firstname: e } } if you really
> wanted that. Why are you plucking and wanting it to be a hash?
>
>
>
> On 25 Jun 2015, at 19:59, Mike Campbell <[email protected]> wrote:
>
> The regular AR pluck method returns the values only, for instance:
> Student.pluck(:firstname) => ["John", "Mike", "Simon"]
>
> It'd be a nice feature to have a version which returns a hashes with the
> column names as keys: [{ firstname: "John"}, { firstname: "Mike" }, {
> firstname: "Simon" }]
>
> I know this can (almost) be achieved with
> Student.select(:firstname).map(&:attributes) (it forces you to have an id
> attribute), but this involves instantiating lots of AR objects, which loses
> the benefit of pluck.
>
> An example implementation would be:
>
> def self.hash_pluck(*keys)
>   pluck(*keys).map{ |vals| Hash[keys.zip(Array(vals))] }
> end
>
> In some (probably bad) benchmarks I made comparing this to the select
> alternative, the select method was ~3.4x slower.
>
> Benchmark.ips do |x|
>   x.report("hash_pluck") { Student.hash_pluck(:firstname) }
>   x.report("select") { Student.select(:firstname).map(&:attributes) }
>   x.compare!
> end
>
> Calculating -------------------------------------
>               select     6.000  i/100ms
>           hash_pluck    24.000  i/100ms
> -------------------------------------------------
>               select     77.096  (±29.8%) i/s -    342.000
>           hash_pluck    265.316  (±41.8%) i/s -      1.104k
>
> Comparison:
>           hash_pluck:      265.3 i/s
>               select:       77.1 i/s - 3.44x slower
>
> Just thought that it might be a nice convenience method to have!
>
> Cheers,
> Mike
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/d/optout.
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to