2013-08-05 62 views
0

我必須道歉,因爲我相對較新的SQL和我的要求似乎相對容易。ActiveRecord:加入has_one關係的子對象的數量

的源代碼:

class Garage < ActiveRecord::Base 
    has_one :car 
    scope :active, ... 

class Car < ActiveRecord::Base 
    has_many :drivers 

一個車庫是active如果屬於車具有至少一個驅動程序。

問題::active範圍必須返回所有與多個驅動程序有車的車庫。

我假定代碼必須是這樣的:

scope :active, joins(:car).where('cars.drivers.num > 0') 

但不幸的是,這將引發一個錯誤。

回答

2

試試這個:

scope :active, joins(:car => :drivers).where('COUNT(drivers.id) > 0') 

我的壞,高於此範圍可能是錯誤的(在COUNT WHERE子句?!)

試試這個:

scope :active, joins(:car => :drivers). 
       select('garages.*'). 
       group('garages.id'). 
       having('COUNT(drivers.*) > 0')