Question

Je les tableaux suivants:

  

Utilisateur: has_many Achats
  Article: Achats has_many

article a une colonne « montant » (peut être + ou -). Et je dois trouver tous les utilisateurs qui ont une somme positive de « Item.amounts » (sur tous les achats chacun a fait)

Comment ce regard de requête comme? (Je ne sais pas comment gérer « SUM » correctement, dans ce cas.)

J'ai commencé avec ce qui suit, mais évidemment, il ne va pas ... (il ne serait pas « inclure » Les achats qui ont un élément avec un négatif Item.amount ...)

  

= @users User.find (: tous,
     : Include => {: achats =>: item},
     : Select => "SUM (item.amount)",
     : Order => "...",
     : Conditions => "...",
     : Groupe => "users.id",
     : Avoir => "SUM (item.amount)> 0"      )

Merci pour votre aide avec ceci!
Tom

Était-ce utile?

La solution

Essayez ceci:

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

Autres conseils

On dirait que c'est un bon cas pour certaines méthodes de modèle.

Je n'ai pas testé, mais je pense que vous voulez faire quelque chose de semblable à ce qui suit:

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

puis

User.items_total

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top