Rails包括导致错误的结果

时间:2017-02-09 23:37:37

标签: ruby-on-rails eager-loading

我正在使用includes来对我的一个查询进行急切加载。我正在尝试查询发票以获取发票总金额。当我使用包含时,当我不使用时,我得到2个不同的结果。任何人都可以解释为什么会发生这种情况/如何最好地解决这个问题?

all_invoices = Invoice.includes(:contractor, :invoice_items, :refunds).with_user(1).date_between(date_range).search_contractor("tester").displayed_invoices.order(created_at: 'DESC')

tester = Invoice.with_user(1).date_between(date_range).search_contractor("tester").displayed_invoices.order(created_at: 'DESC')

all_invoices.pluck(:total_in_cents).sum  #this will return 80000

tester.pluck(:total_in_cents).sum #this will return 40000

第二个是我正在寻找的正确结果,但显然包含在那里有助于提高速度,所以我不想删除它,但我需要得到正确的结果从它。

任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

你从两个不同的阵列中挑选:total_in_cents

Tester正在从SELECTED from "invoices"

中挑选

all_invoices正在提取from SELECTED from "invoices",但:contractor, :invoice_items and :refunds符合以下相同条件:

.with_user(1).date_between(date_range).search_contractor("tester")

我假设其中一些是填充程序,但.with_user查询用户,该用户可能在:contractor, :invoice_items or refunds

中有一些其他相关记录

您可以通过调整列记录名称,重新播种数据库或更好地过滤掉那些与“发票”相关的记录并运行相同的查询来测试它