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