ActiveRecord:加入has_one关系的子对象数

时间:2013-08-05 13:39:37

标签: sql ruby-on-rails activerecord

我必须道歉,因为我对sql相对较新,我的请求似乎相对容易。

源代码:

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')

但不幸的是,这会引发错误。

1 个答案:

答案 0 :(得分:2)

试试这个:

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

我的不好,上面的这个范围可能是错的(WHERE子句中的COUNT?!)

请改为尝试:

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