2014-05-06 36 views
9

gibi bir durum göz önüne alındığında:Raylar grup/sahip/sayım sorgu

Company.joins(:users).group("companies.id").having("COUNT(users.id)=3") 

Ama almanın en etkili yolu budur: 3 Kullanıcısı olan şirketler almak için Company has_many Users

, bu verimli çalışır 0 kullanıcısı olan şirketler (yok)? (Tanım 0 Kullanıcılarla şirketler dışlar tarafından joins gibi), belli ki, aynı yaklaşım işe yaramaz Çünkü:

Company.joins(:users).group("companies.id").having("COUNT(users.id)=0") 

cevap

8

bir SOL Do yerine INNER JOIN JOIN.

Company.joins('LEFT OUTER JOIN users ON companies.id = users.company_id') 
+0

Bu durumun "birleştirmeler" yerine "içerir" kullanılarak basitleştirilebileceğini düşünüyorum. Gibi: Company.includes (: kullanıcılar) .group ("companies.id"). Sahip ("COUNT (users.id) = 0") – miguelfg