2013-02-20 151 views
0

所以我有@line_items,属于@cart。我想让我的购物车清空而不刷新页面。我的购物车模板中设置button_toAJAX on Rails不适用于我

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

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

作品刷新后只会破坏方法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。我想,当按下按钮时,购物车被清空,所以当rails呈现@cart时,它应该显示为空。也许我错了?

+0

您是否使用浏览器中的开发人员工具栏检查了您的AJAX操作?确保它的参数是正确的,这是一个POST操作,它返回HTTP代码200,并且任何结果(例如在XML中)都是正确的。 – halfer 2013-02-20 22:06:35

+0

您应该在'format.html ...'行的上方添加'format.js'。 – mccannf 2013-02-20 22:19:41

+0

其实我有format.js在我的代码,对不起,我刚刚发布的版本,当我试图通过line_items控制器 – 2013-02-20 22:23:45

回答

0

好吧,我发现解决麻烦

1),我认为更好的2种方式,并补充说:依赖=>:摧毁

has_many: line_items, :dependent => :destroy 

到cart.rb模型

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

0

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

+0

因为我伤心它的工作原理如果销毁方法还会在销毁前一个后创建新的空车,但我只是想知道它是否是好的解决方案?我认为你是赖特破坏它是没有的 – 2013-02-21 12:06:44

+0

如果你删除一个数据库条目,并创建另一个数据库,它不是一个好的解决方案,因为你想清空购物车(删除所有line_items),而不是销毁它。 – adrianrubio 2013-02-22 17:12:07

+0

其实C由于“新建”和“创建”方法的不同,art.new不会创建新购物车。不要以为这对用户很重要,但我也不认为这个解决方案很好。 – 2013-02-22 22:29:19

相关问题