2015-11-17 91 views
1

我試圖獲得所有產品銷售數量總和小於產品數量的產品。獲取兒童(數量)總和小於父母(數量)的所有記錄

這是我的嘗試:

class Product < ActiveRecord::Base 
    has_many :sales 

    scope :available, lambda { where(sales.sum(:quantity) < quantity)} 
end 

但是這給了我undefined local variable or method `sales' for #<Class:0x007fd2f571ac58> 我該如何解決這個問題?

回答

3

表中特定字段的sum是通過將您需要的行分組到您的SQL語句中,然後在其上應用聚合函數來獲得的。

你的具體問題可能的ActiveRecord同樣被翻譯:

Product.joins(:sales). 
     group("sales.product_id"). 
     having("sum(sales.quantity) < sum(products.quantity)"). 
     select("products.*") 

您必須使用having這裏,因爲where不上的聚合函數(又名sumcountavg等)

+0

這是適用我需要什麼,但我必須使用「連接」而不是「連接」。 – agustaf

+0

的確修正了! – charlysisto