2011-10-07 102 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