2010-07-14 28 views

Répondre

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

la :include fera une jointure gauche à la table associée si quoi que ce soit sans une campagne devrait avoir NULL des valeurs pour les valeurs de champ de la campagne.

0

La façon dont SQL:

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

Bien que pourquoi voudriez-vous écrire du sql pur dans un environnement qui vous fournit les outils et les moyens de ne pas le faire, –

1

La façon dont Ruby:

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

Je pense que cela est plus élégant si vous l'utilisez autonome dans une méthode. Cependant, je recommanderais d'écrire un named scope pour cela. Là encore, la version Geoffs est la bonne:

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

Par ailleurs, la solution Geoffs est probablement plus efficace car il est plus basse altitude.