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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top