0

所以我有@line_items,属于@cart。我想在不刷新页面的情况下清空我的购物车。我在购物车模板中设置了 button_to

<%= button_to 'Empty cart' , cart, :remote => true, :method => :delete,
:confirm => 'Are you sure?' %>

carts_controller 中的销毁方法

def destroy
  @cart = current_cart
  @cart.line_items.destroy
  session[:cart_id] = nil
  respond_to do |format|
    format.html { redirect_to(store_url, :notice => 'Your cart is currently empty' ) }
    format.js
    format.xml { head :ok }
  end
end

和destroy.js.erb

$('#cart').html("<%= escape_javascript(render(@cart)) %>");

仅在刷新后有效。我想,当按下按钮时,购物车被清空,所以当 rails 呈现 @cart 时,它应该显示为空。也许我做错了什么?

4

2 回答 2

0

在调用销毁操作后,@cart 对象可能为零(如果您通过 session[:cart_id] 获取 current_cart),因此您的 JS 部分无法正确呈现它。无论如何,您应该真正检查您的 development.log 以了解那里真正发生了什么。

于 2013-02-21T02:50:52.437 回答
0

好的,我找到了两种解决问题的方法

1)我认为更好,添加 :dependent => :destroy

has_many: line_items, :dependent => :destroy

到 cart.rb 模型

2) 在销毁方法中调用 Cart.new 的方式

于 2013-02-22T22:27:50.763 回答