Find distinct values in an array of database results

My problem is similar to http://www.ruby-forum.com/topic/171399, but I
don't understand how the asker solved the problem.

I have a model called issues. It returns results that contain a field
called "status". The results might look like this:

open
open
closed
in progress
open
open

How can I use the "uniq" method on the model in order to return a unique
list of statuses like this:

open
closed
in progress

In addition to my question above, I'd also like to apply the equivalent
of a 'where' clause without forcing another SQL query, in order to get
all the columns for "issues" where "status=open". The results would be:

1, open, fred
2, open, john
5, open, john
6, open, sara

# modify this as needed
results = Issue.find(...)

statuses = results.collect(&:status).uniq.sort

open_issues = results.collect { |i| i.status == 'open' }

I suggest you read up on the Array class and its methods
collect, uniq and sort which I used here.

Have fun.

If I may jump in, I'm interested in understanding why you would do this kind of database job with Ruby vs. an extra SQL query.
I had the feeling that it would be wiser (and would execute faster) to delegate the job to the database engine

But I'm kind of amateur.

Thanks to anyone who is willing to put some light for me

Christophe

Christophe Decaux wrote:

If I may jump in, I'm interested in understanding why you would do this
kind of database job with Ruby vs. an extra SQL query.
I had the feeling that it would be wiser (and would execute faster) to
delegate the job to the database engine

I agree. This is a job for SELECT DISTINCT, unless you've already got
the recordset stored from a previous operation.

In general, do your DB queries on the DB side.

But I'm kind of amateur.

Thanks to anyone who is willing to put some light for me

Light: many Rails developers don't know how to use a DB properly. :slight_smile:

Christophe

Le 15 avr. 2010 � 10:01, Franz Strebel a �crit :

Best,

Sometimes you're not querying a database (for example a REST service
that returns a json result). Specially in web applications.

[Please quote when replying, so we know what in particular you're
responding to.]

Vincent M. wrote:

Sometimes you're not querying a database (for example a REST service
that returns a json result). Specially in web applications.

True. But where you have a database, you should use it. :slight_smile:

Especially in Web applications? I don't know. I think I've used more
non-Web apps that query Web services than Web apps that do likewise.

Best,

Sure, however, the original poster specifically wanted to avoid querying the
database twice, which is why the solution ended up Ruby side.

Franz Strebel wrote: