find where association model count=0 ?

I have a widget model that has_many foos. I want to find a list of widgets that have no foos. Can I do this with a "find" method? Right now I am selecting all widgets and iterating through them to look at .count. I know there is a better way to do this, but I haven't been able to figure it out with a single SQL query. Any ideas?


I figured it out right after I posted :wink: Always happens like that.. Here is the solution (or one of them)

@widgets = Widget.find(:all,:select=>"widgets.*,count( as foos_count",:joins=>"LEFT JOIN foos ON = foos.widget_id",:group=>"",:having=>"foos_count=0")

I think that

Widget.find(:all,:select=>"widgets.*",:joins=>"LEFT OUTER JOIN foos ON =foos.widget_id ", :conditions => " is NULL")

might be faster (since the database can infer from that that you want widgets with no foos which is a bit less work than doing all the counting and then filtering that.