私の疑問を最初から説明してみます。次のテーブルがあります。
carts
+----+-------------------------+-------------------------+
| id | created_at | updated_at |
+----+-------------------------+-------------------------+
| 1 | 2013-11-09 12:57:37 UTC | 2013-11-09 12:57:37 UTC |
| 2 | 2013-11-10 11:33:25 UTC | 2013-11-10 11:33:25 UTC |
| 3 | 2013-11-10 12:16:25 UTC | 2013-11-10 12:16:25 UTC |
+----+-------------------------+-------------------------+
line_items
+----+------------+---------+-------------------------+-------------------------+----------+
| id | product_id | cart_id | created_at | updated_at | quantity |
+----+------------+---------+-------------------------+-------------------------+----------+
| 1 | 2 | 2 | 2013-11-10 11:33:25 UTC | 2013-11-10 11:33:25 UTC | 1 |
| 2 | 2 | 2 | 2013-11-10 11:45:26 UTC | 2013-11-10 11:45:26 UTC | 1 |
| 3 | 5 | 2 | 2013-11-10 11:46:06 UTC | 2013-11-10 11:46:06 UTC | 1 |
| 4 | 2 | 2 | 2013-11-10 12:08:41 UTC | 2013-11-10 12:08:41 UTC | 1 |
| 5 | 5 | 2 | 2013-11-10 12:09:03 UTC | 2013-11-10 12:09:03 UTC | 1 |
| 6 | 5 | 2 | 2013-11-10 12:15:48 UTC | 2013-11-10 12:15:48 UTC | 1 |
| 7 | 2 | 3 | 2013-11-10 12:16:26 UTC | 2013-11-10 12:16:26 UTC | 1 |
| 8 | 2 | 3 | 2013-11-10 12:29:21 UTC | 2013-11-10 12:29:21 UTC | 1 |
+----+------------+---------+-------------------------+-------------------------+----------+
次のステートメントを実行します。
cart = Cart.find(2)
sums = cart.line_items.group(:product_id).sum(:quantity)
結果は次のとおりです=> {2=>3, 5=>3}
。ここまでは、製品 ID に基づいて製品の合計を計算し、同じ製品を折りたたむということはかなり明確に思えたと言わざるを得ません。
疑問は後で出てきました。指示を分割しようとしたときcart.line_items.group(:product_id).sum(:quantity)
、次の手順に従いました。
cart = Cart.find(2)
items = cart.line_items.group(:product_id)
そして私は得ました:
+----+------------+---------+-------------------------+-------------------------+----------+
| id | product_id | cart_id | created_at | updated_at | quantity |
+----+------------+---------+-------------------------+-------------------------+----------+
| 4 | 2 | 2 | 2013-11-10 12:08:41 UTC | 2013-11-10 12:08:41 UTC | 1 |
| 6 | 5 | 2 | 2013-11-10 12:15:48 UTC | 2013-11-10 12:15:48 UTC | 1 |
+----+------------+---------+-------------------------+-------------------------+----------+
そして最後に実行したところ、驚いたことに、オブジェクト ( )に対して実行した場合に、各製品 ID に対して 3 に等しい数量を取得する方法を理解できないため、items.sum(:quantity)
再び疑問が生じました。 2 行のみで、それぞれの数量は 1 です。
何を記憶しますか? または SQL 文字列から取得したオブジェクトは、データベースと対話するたびに対話することを意味しますか? 少し混乱しています。=> {2=>3, 5=>3}
sum
items
items
cart.line_items.group(:product_id)
items