Advanced Query in Ruby On Rails (ActiveRecord)

0

I need to do a query for a report something like this:

Produto.include(:clientes).where('count(produto.id) < cliente.quantidade')

In sql it would look something like this:

SELECT 
    C.NOME, C.QUANTIDADE, COUNT(P.ID)
FROM PRODUTOS AS P 
LEFT JOIN CLIENTES AS C ON P.CLIENTE_ID = C.ID 
WHERE COUNT(P.ID) < C.QUANTIDADE

How to do this using Active Record ?

    
asked by anonymous 29.06.2015 / 16:53

2 answers

0

Can not where with count this way, you need to use having . This solved the problem.

Produto.joins(:cliente)
       .group(:nome, :quantidade)
       .having('count(produtos.id) < clientes.quantidade')
       .count(:id)
    
01.07.2015 / 21:48
0

I do not have much experience with Active Record , but see if it gives you a light:

Produto.find(:all,
            joins:  "INNER JOIN 'clientes' ON clientes.id = produtos.cliente_id" ,
            select: "clientes.nome, clientes.quantidade, count(produtos.id)", 
            group:  "clientes.nome, clientes.quantidade")
    
29.06.2015 / 18:20