ruby-on-rails - 如果调用组子句,则将忽略不同的子句
问题描述
对于LineItem
模型,我得到每个行项目的订单数量总和。在此示例中,为简洁起见,我只选择了一个行项目。
查询:
LineItem
.where(product_id: 14)
.includes(:order, :product)
.where(orders: { order_type: 1, order_date: (Date.today - 1.week)..Time.now})
.sum(:order_quantity)
这会产生
=> 88
这是不准确的。提取 LineItem id 向我展示了一些行项目被多次查询:
LineItem
.where(product_id: 14)
.includes(:order, :product)
.where(orders: { order_type: 1, order_date: (Date.today - 1.week)..Time.now})
.pluck(:id)
很多重复(仍然没有弄清楚为什么会发生这种情况):
=> [20330, 20330, 20358, 20358, 20361, 20361, 20363, 20363, 20369, 20405, 20405, 20452, 20452, 20513, 20513, 20513, 20527]
好的,所以让我们清楚地称呼它们......
LineItem
.distinct
.where(product_id: 14)
.includes(:order, :product)
.where(orders: { order_type: 1, order_date: (Date.today - 1.week)..Time.now})
.sum(:order_quantity)
这会产生
=> 27
这是准确的。由于我还试图将多个 Line Items 拉入一个哈希中,因此我需要在查询结束时调用一个 group 子句;这就是问题开始的地方:
LineItem
.distinct
.where(product_id: 14)
.includes(:order, :product)
.where(orders: { order_type: 1, order_date: (Date.today - 1.week)..Time.now})
.group('products.model_number')
.sum(:order_quantity)
现在即使.distinct
被调用,它也恢复到提取重复的行项目:
=> {"LBP8652"=>88}
我在这里遗漏了一些明显的东西吗?我试图.distinct
在查询中的其他地方扔掉它,但它仍然给出了同样不准确的结果。
解决方案
推荐阅读
- javascript - 从表单调用 Javascript 函数但 TempData 仍然可用
- c# - Cloud Run 错误:容器无法启动。启动失败,然后监听端口
- python - 使用两种颜色为 seaborn 热图中的不同行着色
- amazon-web-services - 为什么我在调用我的 lambda 函数时获得访问被拒绝异常以获取秘密,即使它具有权限?
- c - 继续找不到对 rpl_set_root() 的引用
- r - 比较两个基因组范围 (R)
- timezone - 如何在数字海洋应用平台中将服务器设置为我的本地时区
- jquery - 循环来自 AJAX Success 的 JSON 数据?
- ios - 询问多个系统权限组合
- node.js - 如何在后台运行 chokidar(持久:true)?