MySQL / Ruby on Rails - Come “somma” in: caso has_many
-
02-10-2019 - |
Domanda
Ho le seguenti tabelle:
User: Acquisti has_many
Articolo: Acquisti has_many
Il prodotto ha una "quantità" colonna (può essere + o -). E ho bisogno di trovare tutti gli utenti che hanno una somma positiva di "Item.amounts" (su tutti gli acquisti ognuno ha fatto)
Come funziona questo aspetto domanda come? (Io non sono sicuro di come gestire "SUM" in modo corretto, in questo caso).
Ho iniziato con la seguente, ma, ovviamente, è sbagliato ... (non sarebbe "includere" Gli acquisti che hanno un elemento con un valore negativo Item.amount ...)
@users = User.find (: tutti,
: Include => {: acquisti =>: elemento},
: Selezionare => "SUM (item.amount)",
: Order => "...",
: Condizioni => "...",
: Group => "users.id",
: Avere => "SUM (item.amount)> 0" )
Grazie per il vostro aiuto con questo!
Tom
Soluzione
Prova questo:
User.all(:joins => items, :group => "users.id",
:having => "SUM(items.amount) > 0")
Altri suggerimenti
Sembra che questo è un caso buono per alcuni metodi del modello.
non ho la prova questo, ma penso che si vuole fare qualcosa di simile a quanto segue:
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
poi
User.items_total