日付から月の値を抽出して、月ごとに値を合計する PostgreSQL クエリがあります。
SELECT vendors.name AS vendor,
SUM(purchases.invoice_total) AS invoice_total,
EXTRACT(MONTH FROM purchases.date) AS date
FROM vendors, purchases
WHERE purchases.vendor_id = vendors.id
AND purchases.store_id = ?
AND purchases.purchase_department_id = ?
AND (purchases.date BETWEEN ? AND ?)
GROUP BY vendor, EXTRACT(MONTH FROM purchases.date)
ORDER BY vendor, date;
DB コンソールで直接クエリを実行すると、次のような結果が得られます。
+------------------------------------+---------------+------+
| vendor | invoice_total | date |
+------------------------------------+---------------+------+
| Store 1 | 448.56 | 1 |
| Store 1 | 263.44 | 2 |
| Store 1 | 939.47 | 3 |
問題は Rails のfind_by_sql
関数を使用するときに発生します。vendor
とのinvoice_total
値は正しく返されますが、日付の値は nil として返されます。
#<Purchase date: nil, invoice_total: #<BigDecimal:85c75c8,'0.26344E3',18(18)>>
これは私の呼びかけです。ハードコードされた値を試してみましたが、Rails では Extract 関数が実行されないようです。
<% @purchasesSQL = Purchase.find_by_sql(["SELECT vendors.name AS vendor, SUM(purchases.invoice_total) AS invoice_total,
EXTRACT(MONTH FROM purchases.date) AS date
FROM vendors, purchases
WHERE purchases.vendor_id = vendors.id
AND purchases.store_id = ?
AND purchases.purchase_department_id = ?
AND (purchases.date BETWEEN ? AND ?)
GROUP BY vendor, EXTRACT(MONTH FROM purchases.date)
ORDER BY vendor, date;", @store.id, purchase_department.id, @start, @end])
%>
私はすでにいくつかのデバッグを行っており、渡した値は nil でも間違っていません。