# NoMethodError in Store#add\_to\_cart

**URL:** <https://www.ruby-forum.com/t/nomethoderror-in-store-add-to-cart/170504>\
**Category:** Rails\
**Created:** [June 18, 2009, 9:32am UTC](https://www.ruby-forum.com/t/nomethoderror-in-store-add-to-cart/170504 "2009-06-18T09:32:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Xiahong\_G](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/3d9bf3/32.png) [@Xiahong\_G](https://www.ruby-forum.com/u/Xiahong_G)\
**Post date:** [June 18, 2009, 9:32am UTC](https://www.ruby-forum.com/t/nomethoderror-in-store-add-to-cart/170504/1 "2009-06-18T09:32:08Z")

</div>

Dear all,

I’m going, by the book, through the book “Agile Web D. with  
Rails, 2nd edition”. I get stuck in section 8.2

## I am running into following error:

NoMethodError in Store#add\_to\_cart

Showing app/views/store/add\_to\_cart.html.erb where line #4 raised:

You have a nil object when you didn’t expect it!  
The error occurred while evaluating nil.items

Extracted source (around line #4):

1:  
2:

# Your Pragmatic Cart
  
3: 
  
4: \<% for product in @cart.items %\>  
5: - \<%= h(product.title) %\>
  
6: \<% end %\>  
7: 

## RAILS\_ROOT: /home/gaoxh04/rails/depot

## The following is the ruby code: app/controllers/store\_controller.rb

class StoreController \< ApplicationController

def index  
@products = Product.find\_products\_for\_sale  
end

private  
def find\_cart  
session[:cart] ||= Cart.new  
end

def add\_to\_cart  
@cart = Cart.new  
product = Product.find(params[:id])  
@cart.add\_product(product)  
end

## end

## app/models/cart.rb

class Cart  
attr\_reader :items

def initialize  
@items = []  
end

## def add\_product(product) @items \<\< product end end

Kind regards,  
Xiahong

---

<div class="post-metadata">

**Author:** ![Xiahong\_G](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/3d9bf3/32.png) [@Xiahong\_G](https://www.ruby-forum.com/u/Xiahong_G)\
**Post date:** [June 18, 2009, 10:33am UTC](https://www.ruby-forum.com/t/nomethoderror-in-store-add-to-cart/170504/2 "2009-06-18T10:33:20Z")

</div>

On Jun 17, 10:51 pm, Xiahong G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> end
> 
> def add\_to\_cart  
> @cart = Cart.new  
> product = Product.find(params[:id])  
> @cart.add\_product(product)  
> end

You’ve made your add\_to\_cart action private which it shouldn’t be  
( rails ignores private methods when looking for actions, so it has  
just rendered the template without running your add\_to\_cart method at  
all.

Fred

---

<div class="post-metadata">

**Author:** ![Xiahong\_G](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/3d9bf3/32.png) [@Xiahong\_G](https://www.ruby-forum.com/u/Xiahong_G)\
**Post date:** [June 19, 2009, 6:40am UTC](https://www.ruby-forum.com/t/nomethoderror-in-store-add-to-cart/170504/3 "2009-06-19T06:40:07Z")

</div>

Oh, I didn’t notice that… thanks a lot … I appreciate it.

2009/6/18 Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
