Pregunta

Tengo las siguientes tablas:

El usuario: Las compras has_many
Artículo: Las compras has_many

El artículo tiene una "cantidad" de columna (puede ser + o -). Y necesito encontrar todos los usuarios que tienen una suma positiva de "Item.amounts" (sobre todas las compras efectuadas cada uno ha hecho)

¿cómo es esta consulta como? (No estoy seguro de cómo manejar "SUM" correctamente, en este caso).

Me comenzó con la siguiente, pero, obviamente, está mal ... (no sería "incluir" Las compras que tienen un elemento con un negativo Item.amount ...)

@users = User.find (: todos,
: Include => {compras: =>: item}, España : Seleccione => "SUM (item.amount)",
: Para => "...",
: Condiciones => "...",
: Grupo => "users.id",
: Tener => "SUM (item.amount)> 0" )

Gracias por su ayuda con esto!
Tom

¿Fue útil?

Solución

Prueba esto:

User.all(:joins => items, :group => "users.id", 
          :having => "SUM(items.amount) > 0")

Otros consejos

Parece que este es un caso bueno para algunos métodos de modelo.

no he probado esto, pero creo que quiere hacer algo similar a lo siguiente:

class User < ActiveRecord::Base

has_many :purchases
has_many :items, :through => :purchases

def items_total
  #get all the items iterate over them to get the amount, 
  #compact to get rid of nils
  #and reduce with a sum function to total and return
  items.all.each{|item| item.amount}.compact.reduce(:+)
end

entonces

User.items_total

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top