Find :all using :group

hello,

I need to group Users depending on their operating systems field “os”,
so I tried

User.find(:all, :group => :os)

however, the result is an array having only one user for each os group.
I’d like to have ALL the users grouped by :os though

One solution is to write

User.find(:all).group_by{|u| u.os}

However, I wonder if it could be done within the “find” method ?

thanks

This sounds right to me… find the SQL it generated in your .log and
execute it in a mysql console… is the output the same?

On Mar 23, 10:21 am, Ayeye B. [email protected]

On Mar 23, 2:21 pm, Ayeye B. [email protected]
wrote:

User.find(:all, :group => :os)

however, the result is an array having only one user for each os group.
I’d like to have ALL the users grouped by :os though

One solution is to write

User.find(:all).group_by{|u| u.os}

However, I wonder if it could be done within the “find” method ?

Not really. By definition if you group using the database then you
only get back one row for each value of the grouped column - that’s
just what group does in database and you want something else.

Fred

On Mar 23, 11:38 am, Frederick C. [email protected]
wrote:

User.find(:all).group_by{|u| u.os}

However, I wonder if it could be done within the “find” method ?

Not really. By definition if you group using the database then you
only get back one row for each value of the grouped column - that’s
just what group does in database and you want something else.

…such as :order => ‘os ASC’

User.find(:all, :order => ‘os’)

:order sorts ascending by default. You can define the sort order
explicitly with ASC or DESC (i.e., ‘os ASC’ or ‘os DESC’).

On Mar 23, 8:21 am, Ayeye B. [email protected]

However, I wonder if it could be done within the “find” method ?

Not really. By definition if you group using the database then you
only get back one row for each value of the grouped column - that’s
just what group does in database and you want something else.

Fred

I see, thanks for that Fred.

Thanks all for the replies
a.