2016-06-17 11 views
0

Hier ist mein Code, Fehler mit einem Fehler kommt zurück an oder in der Nähe von WHERERails 4 Postgres Abfrage Fehler

first_of_month = Date.current.beginning_of_month 
last_of_month = Date.current.end_of_month 
today = Date.current 
query = quotes.where('close_date BETWEEN ? AND ? AND status_id = 8 WHERE quote_exp < ? ', first_of_month, last_of_month, today) 

query.sum(:total) 
+0

Warum haben Sie eine 'WHERE'-Klausel innerhalb Ihrer' where() '-Funktion? – Nicarus

Antwort

1

Basierend auf Ihren Erläuterungen, können Sie die Abfrage wie folgt schreiben:

query = query.where(<<-EOQ, first_of_month, last_of_month, today) 
    close_date BETWEEN ? AND ? 
    AND (quote_exp >= ? OR status_id = 8) 
EOQ 

, dass Sie geben: (1) alles ab dem Monat (2), die entweder nicht abgelaufen ist oder Status 8. Denken Sie daran, dass A->B auch ~AvB ist.

+0

Ich fühle, was ich suche. Ich werde es einstecken und Sie wissen lassen, wie es geht. –

+0

Arbeitete wie ein Charme. Danke Paul! –

0

Ihre 4. Zeile die WHERE Schlüsselwort nicht enthalten sollte. Sie sollten es mit AND zu ersetzen, wenn Ihre Absicht ist es, das andere Kriterium für den Rest hinzuzufügen, etwa so:

query = quotes.where('close_date BETWEEN ? AND ? AND status_id = 8 AND quote_exp < ? ', first_of_month, last_of_month, today)

+0

Ihr zweites 'AND' würde es so einstellen, dass es nur Anführungszeichen enthält, die innerhalb dieses Zeitraums schließen und eine status_id von 8' AND' und ein Ablaufdatum vor dem heutigen Tag haben, oder? Ich versuche, alle zwischen dem Punkt und "If" zu wählen, die vor dem heutigen Tag abgelaufen sind, und schließe sie dann nur ein, wenn sie ein 'status_id = 8' haben. –

0

Sie es auf diese Weise besser schreiben könnte.

query = quotes.where(close_date: first_of_month..last_of_month, status_id: 8).where('quote_exp < ?', today).sum(:total) 
+0

Ich versuche alle Anführungszeichen mit einem Abschlussdatum zwischen dem Punkt auszuwählen und wenn es abgelaufene vor dem heutigen Tag gibt, dann schließe sie nur ein, wenn sie eine status_id = 8 haben. Würde das das tun? –