2014-02-25 34 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,我一次看上百万个地方。 –