の状況でEmployee has_many Clients
、n 個以上のクライアントを持つすべての従業員を返す ActiveRecord クエリを作成しようとしています。少なくとも 1 人のクライアントを持つすべての従業員を検索する結合クエリを作成するのは簡単ですが、クエリをこのより一般的なケースに拡張すると困惑します。
編集 - データベース レベルでこれを完全に実行しようとしていることを追加する必要があります。Ruby でコレクションを反復処理することは避けたいです。
の状況でEmployee has_many Clients
、n 個以上のクライアントを持つすべての従業員を返す ActiveRecord クエリを作成しようとしています。少なくとも 1 人のクライアントを持つすべての従業員を検索する結合クエリを作成するのは簡単ですが、クエリをこのより一般的なケースに拡張すると困惑します。
編集 - データベース レベルでこれを完全に実行しようとしていることを追加する必要があります。Ruby でコレクションを反復処理することは避けたいです。
muとvijikumarのおかげで、これが私が思いついたものです
Employee.select("employees.*").joins(:clients).group("employees.id").having("count(clients.id) > ?", n)
@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 が表示されます。
これを試して、
@emp_client = []
@emp = Employee.all
@emp.each do |e|
if @emp.clients.present?
@emp_clinet << @emp
end
end