2015-09-12 85 views
-1

我有一个关系总结2列的问题,有记录,如:如何总结列有活动记录关系轨

#<RequestProduct id: 26, request_id: 27, product_service_id: 9, quantity: 12, created_at: "2015-09-12 04:58:19", updated_at: "2015-09-12 04:58:19">, 
#<RequestProduct id: 27, request_id: 27, product_service_id: 10, quantity: 11, created_at: "2015-09-12 04:58:19", updated_at: "2015-09-12 04:58:19">, 
#<RequestProduct id: 28, request_id: 27, product_service_id: 11, quantity: 10, created_at: "2015-09-12 04:58:20", updated_at: "2015-09-12 04:58:20"> 

我要总结的模型RequestProduct数量与价格模型ProductService。我试图用一些方式,但还是失败了,我用这样的方式:

@request.request_products.sum("quantity * request_products.product_service.price") 
@request.request_products.sum("quantity * product_service.price") 
@request.request_products.sum("quantity * ?", product_service.price) 

有没有其他办法?

+0

什么是RDBMS? –

回答

0

你需要尝试是这样的:

res = @request.request_products.joins(:product_services) 
     .select("sum(request_products.quantity) as quantities, sum(product_services.price * request_products.quantity) as total") 

现在,您可以通过访问和值:

res.quantities # total quantity 
res.total  # total amount 
0

的一种方法,这使得这个而无形的Rails,是定义视图在数据库中加入表格,执行算术运算,甚至可以汇总数字。

通过公开基础表的相应键ID列并为视图创建模型(将其标记为只读),可以将其视为常规Rails模型,并将所有复杂度推送到数据库层。有些开发人员会讨厌这个问题,因为它可能会认为它将业务逻辑转移到数据库层,而他们并不习惯这样做。另外,仅仅使用它来简单地连接表和乘数值可能不是一个足够强大的用例,而赞成的论点可能会变得更强,如果你确实需要聚合。

然而,它并不是复杂的逻辑,Rails级别和系统性能的简单性可能无法与其他任何方法匹配。