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