# Collection sum

**URL:** <https://www.ruby-forum.com/t/collection-sum/129308>\
**Category:** Rails\
**Created:** [February 16, 2008, 2:50pm UTC](https://www.ruby-forum.com/t/collection-sum/129308 "2008-02-16T14:50:36Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![grayson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c77e96/32.png) [@grayson](https://www.ruby-forum.com/u/grayson)\
**Post date:** [February 16, 2008, 2:50pm UTC](https://www.ruby-forum.com/t/collection-sum/129308/1 "2008-02-16T14:50:36Z")

</div>

Hello,

I posted this incorrectly on the ruby forum (forgot that it involves  
ActiveRecord, so it’s rails).

I wonder how you step down through an association to do a sum. If I  
have the following associations

user has\_many carts  
cart has\_many cart\_items  
cart\_item has\_one item

I’d like to do a sum of the unit price of all items in the cart and  
tried the following

current\_user.carts.first.cart\_items.items.sum(:unit\_price)  
current\_user.carts.first.cart\_items.sum(:item.unit\_price)

Neither worked.

TIA

GP

---

<div class="post-metadata">

**Author:** ![grayson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c77e96/32.png) [@grayson](https://www.ruby-forum.com/u/grayson)\
**Post date:** [February 18, 2008, 12:23am UTC](https://www.ruby-forum.com/t/collection-sum/129308/2 "2008-02-18T00:23:49Z")

</div>

Grayson,

Try adding one more association to your cart –  
has\_many :items, :through=\>:cart\_items

With that you can pick your cart (cart = user.carts.first) and  
then …

cart.items.sum(:unit\_price)

HTH,  
AndyV

On Feb 16, 8:50 am, Grayson P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![grayson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c77e96/32.png) [@grayson](https://www.ruby-forum.com/u/grayson)\
**Post date:** [February 20, 2008, 4:19am UTC](https://www.ruby-forum.com/t/collection-sum/129308/3 "2008-02-20T04:19:48Z")

</div>

Andy,

That solved the problem. Thanks!

GP

AndyV wrote:

> Grayson,
> 
> Try adding one more association to your cart –  
> has\_many :items, :through=\>:cart\_items
> 
> With that you can pick your cart (cart = user.carts.first) and  
> then …
> 
> cart.items.sum(:unit\_price)
> 
> HTH,  
> AndyV
> 
> On Feb 16, 8:50 am, Grayson P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
