MySQL / Ruby on Rails - ¿Cómo “SUM” en una: caso has_many
-
02-10-2019 - |
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
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