2012-09-13 41 views
2

我有兩個表格點和標籤之間的HABTM關係。我能找到的所有部位用一組給定的使用下面的查詢標籤:HABTM查詢,返回記錄沒有關聯

ids = [2, 3, 4, 8] 
s = Spot.all(:include => 'tags', :conditions => ["tags.id in (?)", ids]) 

我怎麼會發現沒有標籤的所有點?我知道我可能需要對標籤進行計數,但我無法弄清楚如何去做。喜歡的東西:

s = Spot.all(:include => 'tags', :conditions => "tags.count = 0") 

回答

6

你需要一個左連接,並找到那些spots_tags.spot_id是NULL:

s = Spot.joins('LEFT JOIN spots_tags ON spots.id = spots_tags.spot_id'). 
     where('spots_tags.spot_id IS NULL').all 

你可以用一組通過這樣做,算爲好,但該查詢會建立和理解起來稍微複雜一些。

相關問題