所以我有@line_items,属于@cart。我想让我的购物车空着而没有刷新页面。我在购物车模板中设置了button_to
<%= button_to 'Empty cart' , cart, :remote => true, :method => :delete,
:confirm => 'Are you sure?' %>
carts_controller中的destroy方法
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时,它应显示为空。也许我弄错了什么?
答案 0 :(得分:0)
在调用destroy动作后,@ cart对象可能为nil(如果你通过session [:cart_id]获取current_cart),那么你的JS部分无法正确呈现它。无论如何,你应该检查你的development.log,看看那里发生了什么。
答案 1 :(得分:0)
好的,我找到了两种解决问题的方法
1)我认为哪个更好,添加:dependent =&gt; :破坏
has_many: line_items, :dependent => :destroy
to cart.rb model
2)在破坏方法中调用Cart.new的方法