2014-02-25 37 views
0

我想學習與Rails 4的數據庫關聯。Sum表列如果相關表字段滿足條件

在我的應用程序中,我有兩個模型,銷售和產品。

class Sale < ActiveRecord::Base 

    belongs_to :customer 
    belongs_to :product 

end 

class Product < ActiveRecord::Base 

    self.primary_key = :product_id 

    has_many :sales 

end 

我已經設置了一個的has_many和belongs_to的和Rails的控制檯,我可以成功地做到協會:

@s = Sale.find_by_product_id("10RB1236").product.product_group_id 

    Sale Load (1.5ms) SELECT "sales".* FROM "sales" WHERE "sales"."product_id" =  '10RB1236' LIMIT 1 
    Product Load (0.8ms) SELECT "products".* FROM "products" WHERE "products"."product_id" = $1 ORDER BY "products"."product_id" ASC LIMIT 1 [["product_id", "10RB1236"]] 
=> "30" 

這成功地返回該product_group_id爲「30」。我的學習協會的一個里程碑:)對此感到高興。

但現在我希望能夠返回product_id的關聯product_group_id等於30的net_amount的總和。這樣我就可以獲得滿足此條件的數據庫中所有行的總net_amount。

我曾嘗試:

@c = Sale.sum(:net_amount, :conditions => {:product_id.product_group_id => "30"}) 
@c = Sale.sum(:net_amount, :conditions => {:product_id.product.product_group_id => "30"}) 

只是想獲得一些更多的想法或如何做到這一點的解決方案?如果我在純SQL中這樣做,我認爲我會在某處發生內部聯接。

任何想法將不勝感激。

+0

http://stackoverflow.com/questions/12702506/how-to-use-inner-join-in-ruby-on-rails 這個問題是有很大幫助的人停留在此的未來。 –

回答

1
Sale.includes(:product).where("products.product_group_id = ?", "30").sum(:net_amount) 
+0

嗨bjhaid,謝謝你的建議。在那裏它指定了product_group_id等於30?爲了澄清,在銷售表中,可能有許多product_id的product_group_id等於「30」,而不僅僅是「10RB1236」。 –

+0

好酷,謝謝無論如何澄清,我可能不需要加入,生病繼續挖掘。我懷疑自己和我的協會在某個地方塞了個什麼地方,或者我需要回到教室去參加協會。 –

+0

如果情況變得更糟,我可以更改我的銷售表,將product_group_id與product_id一起包含。我很確定這個答案很明顯,但是作爲一個noob,我一次看上百萬個地方。 –