2012-11-05 5 views
7

Employee has_many Clientsの場合、n以上のクライアントを持つEmployeesをすべて返すActiveRecordクエリを作成しようとしています。少なくとも1つのクライアントを持つEmployeeをすべて見つけるためにjoinクエリを書くだけでも簡単ですが、このより一般的なケースに私のクエリを拡張すると、私は困惑してしまいます。子レコードがn個以上あるすべてのレコードを選択するには

編集 - これをデータベースレベルで全面的に実行しようとしていることを付け加えておきます。私はRubyのコレクションを反復しないようにしたい。それはすべて以上のnのクライアントを持っている従業員のidを与える

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

同じため

+0

MySQLやPostgresのを作ってみた何ですか? – sohaibbbhatti

+0

.... postgres .... – brad

+0

もし私が助けるなら、私はSqueelの宝石を手に入れることができます。 – brad

答えて

17

おかげで、これを試してみてください、これは私が

Employee.select("employees.*").joins(:clients).group("employees.id").having("count(clients.id) > ?", n) 
2
@employees=Employee.select{|e|e.clients.length > n } 

アクティブレコードクエリ..

+0

ありがとうございますが、これはActiveRecordクエリではありません。また、> not> =。 – brad

+0

しかし、期待される結果が得られます。 – vijikumar

+0

私はアクティブなレコードクエリも指定しました。 – vijikumar

-2

ミューとvijikumarへ

@emp_client = [] 
@emp = Employee.all 
@emp.each do |e| 
    if @emp.clients.present? 
    @emp_clinet << @emp 
    end 
end 
関連する問題