2

我在两个表点和标签之间有 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")
4

1 回答 1

7

您将需要一个左连接并找到那些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

您也可以使用 group by 和 count 来执行此操作,但是该查询的构建和理解会稍微复杂一些。

于 2012-09-13T18:28:27.430 回答