2017-02-09 3 views
0

Ich verwende enthält, um eifrig auf meine eine Abfrage laden. Ich versuche, Rechnungen abzufragen, um den Gesamtbetrag in Rechnung zu stellen. Ich erhalte 2 verschiedene Ergebnisse, wenn ich Includes verwende, wenn nicht. Kann mir jemand erklären, warum das so ist/wie kann man das am besten beheben?Schienen enthält, verursacht falsches Ergebnis

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 

Das zweite ist das richtige Ergebnis dessen, was ich "m suchen, aber offensichtlich umfasst, die dort für die Geschwindigkeit nützlich ist, so bin ich nicht versuchen, es zu entfernen, aber ich brauche das richtige Ergebnis zu erhalten haben von ihm.

Wer noch keine Ahnung, warum dies geschieht?

+0

Wie lautet der Code für: total_in_cents? – user3456978

+0

: total_in_cents ist nur eine Spalte in meiner Rechnung db-Tabelle. Ich speichere den Gesamtbetrag jeder Rechnung als Cent in jeder Zeile für die angegebene Rechnung –

+0

Sorry, ich nahm an, dass Sie eine Berechnung vor .Sum gemacht haben. Verwenden Sie den Spaltennamen "total in cents" erneut? – user3456978

Antwort

0

Du zupfen :total_in_cents aus zwei verschiedenen Arrays.

Tester Zupfen von SELECTED from "invoices"

all_invoices ist from SELECTED from "invoices", sondern auch :contractor, :invoice_items and :refunds zupfen, die die gleichen Kriterien wie erfüllen:

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

Ich nehme einige dieser Füllstoffe werden, aber das .with_user fragt einen Benutzer, und der Benutzer hat wahrscheinlich einige andere Datensätze bezogen in :contractor, :invoice_items or refunds

Man könnte es testen, indem Sie die Spaltensatznamen Einstellung und Wieder Impfen der Datenbank oder besser noch die Datensätze Ausfiltern nicht mit dem ‚Invoices'and läuft die gleiche Abfrage zugeordnet