سؤال

لدي الجداول التالية:

المستخدم: مشتريات HAS_MANY
البند: مشتريات HAS_MANY

يحتوي العنصر على عمود "مبلغ" (يمكن أن يكون + أو -) وأحتاج إلى العثور على جميع المستخدمين الذين لديهم مبلغ إيجابي من "item.amounts" (على جميع عمليات الشراء التي قام بها كل واحد).

كيف يبدو هذا الاستعلام؟ (لست متأكدًا من كيفية التعامل مع "SUM" بشكل صحيح ، في هذه الحالة.)

لقد بدأت بما يلي ، لكن من الواضح أنه من الخطأ ... (لن يتضمن "عمليات الشراء" التي تحتوي على عنصر به عنصر سلبي. amount ...)

users = user.find (: الكل ،
: include => {: buyshes =>: item} ،
: SELECT => "sum (item.amount)" ،
: Order => "..." ،
: ظروف => "..." ،
: Group => "user.id" ،
: وجود => "sum (item.amount)> 0")

شكرا لمساعدتكم مع هذا!
توم

هل كانت مفيدة؟

المحلول

جرب هذا:

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

نصائح أخرى

يبدو أن هذه حالة جيدة لبعض أساليب النماذج.

لم أختبر هذا ولكن أعتقد أنك تريد أن تفعل شيئًا مشابهًا لما يلي:

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

ومن بعد

User.items_total

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top