Forum: Ruby on Rails ActiveRecord.find results as array of arrays

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
michael_teter (Guest)
on 2008-12-17 10:09
(Received via mailing list)
Howdy.  I imagine this is an elementary Ruby question, but I'd love to
learn the right Ruby idiom for this.

I'd like to take the results of an ActiveRecord.find() and turn them
into an array of arrays [[item1_col1,item1_col2], [item2_col1,
item2_col2]].

Here's my code sample of the brute force way I'm doing it, but I bet
it can be reduced fewer lines of code...

    @crit_sections = Hash.new
    x = Reference.find(
      :all,
      :select => "refid,name",
      :conditions => "ref_type = 'Division'",
      :order => "name")

    ar = []
    x.each do |xi|
      ar.push([xi.refid, xi.name])
    end
    @crit_sections["division"] = ar

Much thanks!
Michael
Franz S. (Guest)
on 2008-12-17 10:40
(Received via mailing list)
On Wed, Dec 17, 2008 at 9:08 AM, michael_teter 
<removed_email_address@domain.invalid>
wrote:
>
>    @crit_sections = Hash.new
>    x = Reference.find(
>      :all,
>      :select => "refid,name",
>      :conditions => "ref_type = 'Division'",
>      :order => "name")
>

You can use the collect method

@crit_sections[:division] = Reference.find(:all,
                                                            :select =>
"refid,name",

:conditions => "ref_type = 'Division'",
                                                            :order =>
"name").collect { |r| [ r.refid, r.name ] }

I took the liberty of using a symbol for your hash key instead of a
string.
Read up on symbols - in simplest terms, they are like strings without
all
the string functionality, which we usually don't need anyway for hash
keys.
michael_teter (Guest)
on 2008-12-17 21:51
(Received via mailing list)
That's exactly what I was after.  I knew it was possible, but I was
missing "collect" :)

As for symbols, at one point I used them a lot, but then I ran into
some places that seemed to really want strings.  Out of confusion, I
stopped using symbols in a lot of cases.  I will re-evaluate where I'm
using strings though.

Thanks!
This topic is locked and can not be replied to.