2012-11-05 11 views
7

Per la situazione in cui Employee has_many Clients, sto tentando di scrivere una query ActiveRecord che restituirà tutti i Dipendenti che hanno n o più client. È abbastanza semplice scrivere una query di join per trovare tutti i Dipendenti con almeno 1 client ma estendere la mia query a questo caso più generale mi ha lasciato perplesso.Come selezionare tutti i record con più di n record figli

Modifica - Devo aggiungere che sto cercando di farlo interamente a livello di database. Voglio evitare di ripetere la raccolta in Ruby.

+0

mysql o postgres? – sohaibbbhatti

+0

.... postgres .... – brad

+0

Ho anche a disposizione la gemma Squeel se questo aiuta – brad

risposta

17

Grazie a mu e vijikumar, questo è quello che è venuta in mente

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

query di record attivo per lo stesso ..

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

darà i dipendenti id che sono tutti avendo più di n clienti.

+0

Grazie, ma questa non è una query di ActiveRecord. Inoltre,> not> =. – brad

+0

ma darà il risultato previsto. – vijikumar

+0

ho dato anche la query record attiva .. – vijikumar

-2

provare questo,

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