hi all.. I've been studying ROR using the agile development ROR book. and I'm stuck at the shopping cart.
what I am trying to do is that, from the book, the 'add_to_cart' button doesn't take the quantity from the users.
well, What I am trying to do is that allowing users to input quantity value before pressing 'add_to_cart' and when 'add_to_cart' is pressed, the users can see the input values with the total price before checking out the items.
So, on the view, I added the following line.
Qty : <%= text_field_tag 'quantity', '1', :size => 2, :maxlength => 2 %>
<% form_remote_tag :url => {:action => 'add_to_cart', :id => product } do %> <%= submit_tag "Add to Cart" %> <% end %>
and the store_controller,
quantity = Integer(params['quantity'])
well.. the flashing cart shows 0 quantity. i need help, please?
/////////////// Your Cart 0(quantity) × 1(prod_id) $0.00 Total $0.00 ////////////////
--------------------------- (controller) def add_to_cart begin product = Product.find(params[:id]) quantity = Integer(params['quantity']) #------ i hope this is right way to get quantity from the view
rescue ActiveRecord::RecordNotFound logger.error("Attempt to access invalid product #{params[:id]}" ) redirect_to_index("Invalid product" ) else @cart = find_cart @current_item = @cart.add_product(product, quantity) respond_to do |format| format.js if request.xhr? format.html {redirect_to_index} end end end
--------------------------- (cart_item.rb) def initialize(product, quantity) @product = product @quantity = quantity end def increment_quantity(quantity) @quantity += quantity end def price
#### product has a p200 field with the price in it @product.p200 * @quantity end
-----------------------------(cart.rb) def add_product(product, quantity) current_item = @items.find {|item| item.product == product} if current_item current_item.increment_quantity(quantity) else current_item = CartItem.new(product, quantity) @items << current_item end current_item end
def total_price @items.sum { |item| item.price } end
def total_items @items.sum { |item| item.quantity } end