2010-07-14 136 views

回答

3
Video.all(:include => :campaigns, :conditions => ["campaigns.id IS ?", nil]) 

:include会做左连接到相关的表,所以没有一个运动都应该有对运动的字段值NULL值。

0

的SQL方式:

Videos.select_by_sql("SELECT * FROM videos WHERE id NOT IN (SELECT video_id FROM campaign_videos)") 
+0

虽然你为什么要在一个为你提供工具和手段的环境中编写纯sql, – 2010-07-14 07:07:29

1

Ruby之道:

Video.all.select {|v| v.campaigns.empty?} 

我想如果你使用它独立的方法,这是更优雅。不过,我会建议为此写一个named scope。然后Geoffs版本是正确的:

named_scope :campaign_less, :include => :campaigns, :conditions => ["campaigns.id IS ?", nil] 

此外,Geoffs解决方案可能更高效,因为它更低级。