2013-01-06 43 views
0

我有2種型號如何當條件依靠關係檢索模型屬性

class User 
has_many :cars 
end 

class Car 
belongs_to :user 
end 

我可以做User.where(...)和測試任何用戶屬性

如何測試關係的屬性? 例如,我想要做'get all users where user.car.color = green'?或'get all users which have more than two cars'

回答

2

使用joins

User.joins(:cars).where('cars.color' => 'green') 

而對於第二個:

User.joins(:cars).group('users.id HAVING count(cars.id) > 2') 

,並把那些一起:

User.joins(:cars) 
    .group('users.id HAVING count(cars.id) > 2') 
    .where('cars.color' => 'green') 

參見:Rails 3 query on condition of an association's count

+0

我該如何計算汽車的數量? '在哪裏('COUNT(cars)> 2')'不起作用 –

+0

更新了我的答案。 –

+0

如果添加.where('cars.color'=>'green'),那麼這是最好的答案 – plasticide

1

這樣的事情應該工作:

User.include(:cars).where("cars.color" => "green") 
+0

根據下面的附加問題,你可以這樣做:'User.joins(:cars).select(「users.id,users.first_name,users.etc,count(cars.id)」)。 「cars.color」=>「green」)。group(「users.id,users.first_name,users.etc」)。having(「count(cars.id)> 2」)' – plasticide