2017-02-03 4 views
2

SQLクエリをActiveRecordに変換することに問題があります。ユーザーアクティブレコードのグループ化された行の合計を選択します。

のLineItem#数量:整数 - belongs_toの、line_items:多くを持っている - 整数:

ユーザ#1にhas_many:バスケット

バスケット#日:日、user_idはここに私のドメインモデルの簡易版ですbelongs_toの:バスケット

私はSQLで次のクエリを実行できます。

SELECT baskets.date, SUM(line_items.quantity) from baskets 
INNER JOIN line_items ON line_items.basket_id = basket.id 
WHERE baskets.user_id = 2 
GROUP BY baskets.id 
ORDER BY baskets.date DESC 

pgAdminで、このクエリを実行している、私は2つの列を取得します私はしたい:バスケットの日付とその特定のバスケットに関連付けられているすべてのline_item数量の合計。しかし

、私は同じデータのためのActiveRecordクエリを構成しよう:

User.find(2).baskets 
    .select('baskets.date,'SUM(line_items.quantity)') 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 

それはバスケットの日付を返しますが、グループ化されたLINE_ITEM量の合計ではありません。理想的には、{date => quantity、date => quantity ...}のような形式で結果を得たいのですが、どうやってそこに到達するかはわかりません。

答えて

1

シングル引用符はあなたのために、これはあなたがまた、日付の配列を返しますpluckを使用して

User.find(2).baskets 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 
    .pluck("baskets.date, sum(line_items.quantity) as quantity_sum") 
+1

は素晴らしい合計することができます

User.find(2).baskets .joins(:line_items) .group('baskets.id') .order('baskets.date desc') .select("baskets.date, sum(line_items.quantity) as quantity_sum") 

動作するはずこれをめちゃくちゃにされています。常に小さなもの。そして、良いことを知りたい!ありがとうございました。 – user7280963

関連する問題