如何选择包含n个以上子记录的所有记录

时间:2012-11-05 06:18:05

标签: ruby-on-rails activerecord

对于Employee has_many Clients的情况,我正在尝试编写一个ActiveRecord查询,该查询将返回所有具有n个或更多客户端的Employe。编写连接查询以查找具有至少1个客户端的所有Employees是很简单的,但是将查询扩展到这个更一般的情况让我感到难过。

编辑 - 我应该补充一点,我试图在数据库级别完全这样做。我想避免在Ruby中迭代集合。

3 个答案:

答案 0 :(得分:18)

感谢mu和vijikumar,这就是我想出来的

Employee.select("employees.*").joins(:clients).group("employees.id").having("count(clients.id) > ?", n)

答案 1 :(得分:3)

@employees=Employee.select{|e|e.clients.length > n }

相同的活动记录查询..

@employees=Employee.find(:all, :joins=>"as emp inner join clients as c on c.employee_id=emp.id", :select=>"emp.id", :group=>'emp.id having count(c) > n')

它将为员工ID提供超过n个客户。

答案 2 :(得分:-2)

试试这个,

@emp_client = []
@emp = Employee.all
@emp.each do |e|
  if @emp.clients.present?
    @emp_clinet << @emp
  end
end