Hello, Im in the process of working my way through the 2.ed of the agile book. As many of you already know, the book goes through the regular development cycle of the Depot application. I have hit a wall when they started talking about the sessions and the exact mechanics of how an item is added to the session. The code looks like this: depot/app/controllers/store_controller: def add_to_cart @cart = find_cart product = Product.find(params[:id]) @cart.add_product(product) end private def find_cart session[:cart] ||= Cart.new end end depot/app/models/cart.rb class Cart attr_reader :items def initialize @items = [] end def add_product(product) @items << product end end depot/app/views/store/add_to_cart.rhtml <h1>Your Pragmatic Cart</h1> <ul> <% for item in @cart.items %> <li><%= h(item.title) %></li> <% end %> </ul> 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? Also, the line product = Product.find(params[:id]) How come they arn''t using an @ sign infront of the product? What are the mechanics of the line @cart.add_product(product)? The line @cart.items, is the items referring to the line attr_reader :items? When is the initialize method in the model used? Any help on this topic would be greatly appreciated! Thanks in advance! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Conrad Taylor
2007-Feb-07 08:23 UTC
Re: 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 On 2/6/07, Kristen <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:>[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> > Any help on this topic would be greatly appreciated! Thanks in advance! > > -- > Posted via http://www.ruby-forum.com/. > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---