# NoMethodError in StoreController#add\_to\_cart

**URL:** <https://www.ruby-forum.com/t/nomethoderror-in-storecontroller-add-to-cart/109473>\
**Category:** Rails\
**Created:** [July 15, 2007, 3:04pm UTC](https://www.ruby-forum.com/t/nomethoderror-in-storecontroller-add-to-cart/109473 "2007-07-15T15:04:41Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![kapil\_kaushik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/b782af/32.png) [@kapil\_kaushik](https://www.ruby-forum.com/u/kapil_kaushik)\
**Post date:** [July 15, 2007, 3:04pm UTC](https://www.ruby-forum.com/t/nomethoderror-in-storecontroller-add-to-cart/109473/1 "2007-07-15T15:04:41Z")

</div>

Hi

I am new to Rails, and I was trying to follow the “Agile Web D.  
With Rails” textbook. As I was trying to create the “Add\_to\_cart”  
application, I found that when I clicked the “Add to Cart” link on my  
[http://localhost:3000/store](http://localhost:3000/store) page, I got the following error:

# NoMethodError in Store#display\_cart

Showing app/views/store/display\_cart.rhtml where line #20 raised: You  
have  
a nil object when you didn’t expect it!  
The error occurred while evaluating nil.product

Extracted source (around line #20): 17:   
18: \<%  
19: for item in @items  
20: product = item.product  
21: -%\>  
22:   
23: \<%= item.quantity %\>

Just for pointer, I had actually got to the correct page once, but then  
I  
skipped the “Iteration C2: Handling Errors” part in the tutorial and  
went  
straight to the “8.5 Iteration C3: Finishing the Cart” part, and  
implemented  
the empty\_cart function there. I have been getting this problem since  
then  
(when I implemented this function and clicked the link in browser and  
then  
came back to add more objects to the cart). Could it be that I have  
deleted  
the object or something? After some googling I thought that the problem  
was  
actually related to the session, and so i tried to clear the session by  
using:

1. rake db:sessions:clear
2. rake tmp:sessions:clear

But even this did not solve the problem. So I am clueless as of now.  
Below  
is the code for reference:

# in store\_controller.rb

```
def add_to_cart
    product = Product.find(params[:id])
    @cart = find_cart
    @cart.add_product(product)
    redirect_to(:action => 'display_cart')
end

def display_cart
    @cart = find_cart
    @items = @cart.items
    if @items.empty?
        redirect_to_index("Your cart is currently empty")
    end
end

def find_cart
    session[:cart] ||= Cart.new
end

```

====================

Any help would be really appreciated !!!

Thanks,  
Kapil

---

<div class="post-metadata">

**Author:** ![kapil\_kaushik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/b782af/32.png) [@kapil\_kaushik](https://www.ruby-forum.com/u/kapil_kaushik)\
**Post date:** [July 17, 2007, 6:50am UTC](https://www.ruby-forum.com/t/nomethoderror-in-storecontroller-add-to-cart/109473/2 "2007-07-17T06:50:54Z")

</div>

Hi

I am still waiting for a reply !!

Thanks,  
Kapil

On 7/15/07, kapil kaushik [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Showing app/views/store/display\_cart.r html where line #20 raised: You
> 
> 1. rake db:sessions:clear  
> @cart.add\_product(product)
> 
> ```
> def find_cart
> session[:cart] ||= Cart.new
> end
> 
> ```
> 
> ====================
> 
> Any help would be really appreciated !!!
> 
> Thanks,  
> Kapil

–  
I can sum up everything i learned about life in three words – IT GOES  
ON !!

---

<div class="post-metadata">

**Author:** ![kapil\_kaushik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/b782af/32.png) [@kapil\_kaushik](https://www.ruby-forum.com/u/kapil_kaushik)\
**Post date:** [July 20, 2007, 11:27am UTC](https://www.ruby-forum.com/t/nomethoderror-in-storecontroller-add-to-cart/109473/3 "2007-07-20T11:27:23Z")

</div>

I have been waiting for some help from the gurus out here for last 5  
days.  
Anything I have been trying is not working !!

Thanks,  
Kapil

On 7/15/07, kapil kaushik [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Showing app/views/store/display\_cart.r html where line #20 raised: You
> 
> 1. rake db:sessions:clear  
> @cart.add\_product(product)
> 
> ```
> def find_cart
> session[:cart] ||= Cart.new
> end
> 
> ```
> 
> ====================
> 
> Any help would be really appreciated !!!
> 
> Thanks,  
> Kapil

–  
I can sum up everything i learned about life in three words – IT GOES  
ON !!

---

<div class="post-metadata">

**Author:** ![kapil\_kaushik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/b782af/32.png) [@kapil\_kaushik](https://www.ruby-forum.com/u/kapil_kaushik)\
**Post date:** [July 20, 2007, 11:42am UTC](https://www.ruby-forum.com/t/nomethoderror-in-storecontroller-add-to-cart/109473/4 "2007-07-20T11:42:57Z")

</div>

Everything looks normal at first sight…  
what does your @items collection look like ? Do “p @items” in your  
controller, it will be displayed in your console.

---

<div class="post-metadata">

**Author:** ![kapil\_kaushik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/b782af/32.png) [@kapil\_kaushik](https://www.ruby-forum.com/u/kapil_kaushik)\
**Post date:** [July 22, 2007, 10:55pm UTC](https://www.ruby-forum.com/t/nomethoderror-in-storecontroller-add-to-cart/109473/5 "2007-07-22T22:55:09Z")

</div>

Hi Stijn ,

Thanks !!

On printing the items, I saw that my product did not have any order\_id.  
On  
thorough analysis of my code, I found that I had mistakenly added an  
extra  
constructor in the line\_items.rb file which was causing the problem. But  
it  
took me decent amount of time to do the code review. Things are working  
fine  
now.

Apologies for bothering the community unnecessarily.

Regards,  
Kapil

But i had thought that the

On 7/20/07, Stijn P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 

–  
I can sum up everything i learned about life in three words – IT GOES  
ON !!
