Frage

Ich habe die folgenden Tabellen:

Benutzer: has_many Käufe
Item: has_many Käufe

Element hat eine Spalte „Menge“ (kann + oder -). Und ich brauche alle Nutzer zu finden, die eine positive Summe von „Item.amounts“ haben (über alle Käufe jeder gemacht hat)

Wie funktioniert diese Abfrage aussehen? (Ich bin nicht sicher, wie „SUM“ richtig zu handhaben, in diesem Fall).

Ich begann mit dem folgenden, aber offensichtlich, dass es falsch ist ... (es wäre nicht „schließen“ Käufe, die ein Element mit einem negativen Item.amount haben ...)

@users = User.find (: alle,
: Include => {: Käufe =>: item},
: Select => "SUM (item.amount)",
: Order => "...",
: Bedingungen => "...",
: Group => "users.id",
: Mit => "SUM (item.amount)> 0" )

Vielen Dank für Ihre Hilfe bei diesem!
Tom

War es hilfreich?

Lösung

Versuchen Sie diese:

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

Andere Tipps

Es klingt wie dies ein gutes Beispiel für einige Modellverfahren ist.

Das habe ich nicht testen, aber ich glaube, Sie wollen etwas tun ähnlich der folgenden:

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

dann

User.items_total

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top