8

の状況でEmployee has_many Clients、n 個以上のクライアントを持つすべての従業員を返す ActiveRecord クエリを作成しようとしています。少なくとも 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 に答える