More elegant solution for "missing" has-many through ids?

I have LabGroup and LabDesc which have many through LabDescGroup. I’d
like to identify LabDescs which don’t have a LabGroup. This works:

x = []
LabDescGroup.find( :all, :select => ‘DISTINCT lab_desc_id’ ).each{ |c|
x << c.lab_desc_id }
y = []
LabDesc.find( :all, :select => ‘id’ ).each{ |c| y << c.id }
notfound = x - y

But is there a more elegant way? It feels like I should be able to do
this entirely through queries, but I’m not seeing the solution.

This should do it:

LabDesc.find(:all, :conditions => ‘NOT EXISTS(SELECT * FROM
lab_desc_groups WHERE lab_desc_id=lab_descs.id)’)

/Lasse

2010/3/24 Dudebot [email protected]

On Mar 24, 4:42 pm, Lasse B. [email protected] wrote:

This should do it:

LabDesc.find(:all, :conditions => ‘NOT EXISTS(SELECT * FROM
lab_desc_groups WHERE lab_desc_id=lab_descs.id)’)

Lasse, you have my “SQL Guru of the Year Award.” Many thanks,
Craig

He he he NICE :slight_smile:

/Lasse

2010/3/25 Dudebot [email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs