Rails购物车不会在第二次添加时更新

时间:2013-06-25 14:04:23

标签: javascript jquery ruby-on-rails ajax

我有一个购物车,可以添加一个项目,并且将显示购物车,显示购物车中的商品数量为1,当我将相同的商品添加到购物车时,它会被添加但是购物车不会更新,直到我再次添加项目或同一项目,或刷新购物车。 添加相同的第三项将更新购物车并显示正确的数量,它只是在添加第二个相同项目后不会更新,并且在页面刷新或添加不同之前将数量显示为少一个推车!

代码主要来自“agile web dev with rails”3.2版本。

line_items/create.js.erb
if ($('#cart tr').length > 0) { $('#cart').show(); }
$('#cart').html("<%=j render @cart %>");



class LineItemsController < ApplicationController
      def create
        @cart = current_cart
        item = Item.find(params[:item_id])
          @line_item = @cart.add_item(item.id)
          respond_to do |format|
            if @line_item.save
              puts @cart
              format.js { @current_item = @line_item}
              format.html { redirect_to store_url,
                notice: "#{item.name} added to cart." }
              format.json { render json: @line_item,
                status: :created, location: @line_item }
            else
              format.html { render action: "new" }
              format.json { render json: @line_item.errors,
                status: :unprocessable_entity }
            end
          end
      end

    end

carts/show.html.haml
= render @cart

carts/_cart.html.haml
= render cart.line_items



line_items/_line_item.html.erb

   <% if line_item == @current_item %>
<tr id="current_item">
<% else %>
<tr>
<% end %>
<td><%= line_item.quantity %> &times;</td>
<td><%= line_item.item.name %></td>
<td class="item_price"><%= number_to_pounds(line_item.total_price) %></td>
</tr>




class Cart < ActiveRecord::Base
  has_many :line_items, dependent: :destroy
  # attr_accessible :title, :body

  def add_item(product_id)
    current_item = line_items.find_by_item_id(product_id)
    if current_item
      current_item.quantity += 1
    else
      current_item = line_items.build(item_id: product_id)
    end
    current_item
  end

1 个答案:

答案 0 :(得分:0)

@cart对象总是落后一步,因为它在保存后没有更新。 保存在line_items控制器中后设置@cart = current_cart,就像使用一样 而是在渲染购物车视图时@cart.reload