2011-10-07 112 views
0

我正在制作一个web应用程序,让人们可以将课程添加到购物车。我有一个has_many LineItems的购物车模型。使用jquery/ajax时页面不更新

在购物车中,我有一个允许用户删除单个订单项的ajaxified按钮。这工作正常。下面是该代码:

_line_item.html.erb:

<div class="delete_line_item"><%= button_to 'Delete', line_item, 
{:method => :delete, :remote => true} %></div> 

的line_items控制器:

def destroy 
    @user = current_user 
    @line_item.destroy 
    @cart = @user.cart 

    respond_to do |format| 
     format.html { redirect_to(root_path) } 
     format.js 
     format.xml { head :ok } 
    end 
    end 

然后,destroy.js.erb文件,位于我的意见/ line_items内文件夹:

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

我想为清空购物车做类似的事情。为此,我使用购物车控制器中的更新操作。下面是相应的代码块这个:

<div class="empty_cart"><%= button_to 'Empty cart', cart, {:method => :put, :remote => true, 
:confirm => 'Are you sure?'} %></div> 

#carts controller 
    def update 
    if @cart.line_items 
     @cart.line_items.each do |item| 
     item.destroy 
     end 
    end 

    respond_to do |format| 
     if @cart.update_attributes(params[:cart]) 
     format.html { redirect_to(root_path, :notice => 'Cart emptied.') } 
     debugger 
     format.js 
     format.xml { head :ok } 

最后,这里的update.js.erb文件我已经把我的观点中/大车夹

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

的问题是,当我尝试清空购物车时,请求会通过(当我刷新页面时,购物车是空的),但点击后不会立即出现更改。这让我觉得我的浏览器根本就没有渲染.js.erb文件。我是否需要将update.js.erb文件放在不同的文件夹中或重命名它?还是别的什么?

回答

0

为什么不使用更新操作,而是使用购物车的销毁操作而不是使用更新?这就是我所做的,它的工作。

+0

我的代码被连接起来,使得其他一些东西取决于购物车的存在。所以我希望用户只能清空购物车,而不能销毁它。 (我知道这可能是糟糕的设计)。任何想法,如果我想使用更新?另外,对于你的销毁行为,你是否创建了一个destroy.js.erb文件?你把它放在哪里?谢谢。 – jyli7