8

对于这种情况Employee has_many Clients,我正在尝试编写一个 ActiveRecord 查询,该查询将返回所有拥有 n 个或更多客户的员工。编写一个连接查询来查找至少有 1 个客户的所有员工很简单,但是将我的查询扩展到这个更一般的情况让我很困惑。

编辑 - 我应该补充一点,我正在尝试完全在数据库级别执行此操作。我想避免在 Ruby 中迭代集合。

4

3 回答 3

22

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

Employee.select("employees.*").joins(:clients).group("employees.id").having("count(clients.id) > ?", n)
于 2012-11-06T11:10:18.753 回答
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')

它将提供所有拥有超过 n 个客户的员工 ID。

于 2012-11-05T07:00:29.447 回答
-2

试试这个,

@emp_client = []
@emp = Employee.all
@emp.each do |e|
  if @emp.clients.present?
    @emp_clinet << @emp
  end
end
于 2012-11-05T07:12:01.310 回答