2

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_idNULLの結合を見つけます。

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 に答える