如果关联的表字段满足条件,则为Sum table列

时间:2014-02-25 02:00:52

标签: ruby ruby-on-rails-4 associations has-many belongs-to

我正在尝试使用Rails 4学习数据库关联。

在我的应用程序中,我有两个型号,销售和产品。

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”。我的学习协会的里程碑:)对此感到高兴。

但是现在我希望能够返回net_amount的总和,其中product_id的关联product_group_id等于30.这样我就可以得到满足这个条件的数据库中所有行的总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中这样做,我想我会在某个地方发生内部联接。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

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