2010-07-14 71 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解決方案可能更高效,因爲它更低級。

相關問題