The Depot "Add to Cart" sessions question (2.ed agile book)

Hi Kristen, please see my answers to your questions below. Also, I would recommend the you read:

Programming Ruby Chapters 1 - 7

or

Ruby For Rails

Good luck,

-Conrad

[snip]

So, this is what I understand what is happening: When the "add to cart" button is clicked, the add_to_cart method is run and a hash is either retrieved or created (not sure exactly how this work). Does Cart.new mean that it goes into the model Cart and creates a new item? Does this also mean that the initialize method inside the Cart model is run?

Actually, Cart.new creates an instance of the Cart class. For example,

@cart = Cart.new

Now, when 'new' is called on the Cart class, the Cart's initialize method is called. This intern initializes the items array to be empty (i.e. ). Then the new instance is returned and assigned to @cart in the example above.

Also, the line product = Product.find(params[:id]) How come they arn't using an @ sign infront of the product?

The reason for this is that find is a class method. Thus, we invoke class methods using the following syntax:

class_name.method_name

e.g. Product.find

If it were an instance method, then we would have something similar to the following:

@product.name # where name is an attribute accessor defined on the class Product

What are the mechanics of the line @cart.add_product(product)?

@cart is an instance of the Cart class and we're passing a message to this instance called add_product which takes product instance as a parameter. In short, we're adding a product to the @cart instance.

The line @cart.items, is the items referring to the line attr_reader :items?

Yes, this is correct.

When is the initialize method in the model used?

It is invoked anytime that you call new on a class. For example,

@cart = Cart.new