我正在整理一份报告,显示拥有这些产品的公司的产品统计信息。这份报告以我需要的形式包含多达150个“计数”,因为我们在12个产品类型的数量与15种不同的统计类别中填充表格。
这是模型的设置。我担心这有点复杂!
Company is the entity accessing the report.
Company has many Products through Matchings; and
Product has many Companies through Matchings.
Matching belongs_to Order.
Example report:
___________|_Available/Active/Light Available/Active/Heavy (+12 columns)__
Perishable |
Intangible |
(+10 rows) |
产品类型位于“产品”表中(它们位于报告的左侧)。 报告顶部的类别是三个标准的组合:两个来自Product,一个来自Order。
示例 - 对于Perishable行中的一个单元格,显示订单类型为“有效”的产品匹配数量,产品重量为“浅”且产品状态为“可用” ”。
就其本身而言,上述查询并不算太糟糕,但如果我继续这样做,我将会对这份报告提出约170个查询 - 这两个问题都是一个不优雅且非常不切实际的解决方案。是否有一种神奇的ActiveRecord方式来处理这种情况?
答案 0 :(得分:1)
您始终可以创建后台作业以定期运行并预先缓存结果,或者预生成整个报告。这将使您的用户不必坐下等待170个查询运行,我认为可以接受稍微陈旧的结果。
至于它的优雅和实用性,你可以使用的唯一魔法就是SQL。您的对象模型不是为报告而构建的,使用的工具也不会感觉不好。
答案 1 :(得分:1)
有一个statistics宝石可以做这种事情。它允许您缓存统计信息。
我已将它用于轻量级统计数据,例如计数和平均值,但从未采用基准测试,如果性能受到关注,这绝对是something you'll want to do。