2017-05-14 1 views
0

Ich bin neu bei Schienen. Ich versuche herauszufinden, wie man Modell-Methode innerhalb der sum() SQL-Funktion verwenden. Ich habe versucht, nach der Lösung zu suchen, konnte aber keine finden. Hier ist der Code-Schnipsel:Schienen 3: Verwenden Sie die Modellmethode bei der Verwendung von sum()

SUM(indents.total_payable_amount_paid) AS sum_comm_t_amount_payable_paid 

Ich möchte Methode total_payable_amount_paid innerhalb indent Modell definiert genannt verwenden. Aber es gibt immer einen Fehler:

PGError: ERROR: column indents.total_payable_amount_paid does not exist. 

Also, was ist die Lösung für dieses Problem? Danke im Voraus!

+0

Was versuchen Sie zu tun? Was immer Sie in 'SUM' eingeben, muss der _name_ der Spalte in der Tabelle Ihres Modells sein, deshalb erhalten Sie diesen Fehler. – Gerry

+0

Ich weiß. Ich habe dieses Feld in der Tabelle nicht, stattdessen habe ich eine Methode, die nur einen Wert zurückgibt. Gibt es eine andere Lösung, als ein neues Feld zur Tabelle hinzuzufügen? – Akshay

+0

Ich habe eine Antwort hinzugefügt, die Ihnen helfen könnte, aber ich bin neugierig: Warum möchten Sie einen solchen Wert hinzufügen? Wenn Sie mehr von Ihrem Code teilen, ist es einfacher, bessere Lösungen für Ihr Problem zu finden. – Gerry

Antwort

0

Das Problem ist, dass Ihr SUM (was ich nehme an, es ist in einer Abfrage String) nimmt indents.total_payable_amount_paid als Teil dieser Zeichenfolge.

Um zu vermeiden, dass Sie String-Interpolation verwenden könnte den Wert, den Sie, wie diese einstellen möchten:

"SUM(#{indents.total_payable_amount_paid}) AS sum_comm_t_amount_payable_paid" 

können also sagen, indents.total_payable_amount_paid kehrt 250, dann wird der obige Code diese Zeichenfolge generieren:

"SUM(250) AS sum_comm_t_amount_payable_paid" 

Aber SUM mit keinen Effekt machen, da Sie einen Wert geben, so dass Sie die gleiche Sache, ohne sie erreichen können:

"#{indents.total_payable_amount_paid AS sum_comm_t_amount_payable_paid" 
#=> "250 AS sum_comm_t_amount_payable_paid" 
+0

Danke für die Antwort. Leider funktioniert das nicht für mich. Ich habe einen anderen Weg gefunden, dies zu lösen, indem ich nur db-Spalten verwende. Ich denke, was ich vorher versuchte (d. H. Diese Frage) macht keinen Sinn. – Akshay

Verwandte Themen