2016-05-13 26 views
0

後,基本上我一直在關注的RailsCasts寶基礎教程和車被標記爲購買後,你需要重新設置會話[:cart_id] =零復位車mark_cart_as_purchased

這裏是我的代碼

class Customer::CartsController < ApplicationController 
def show 
    @cart = if current_user 
    current_user.cart 
    else 
    Cart.find session[:cart_id] 
    Cart.destroy session[:cart_id] 
    session[:cart_id] = nil if current_user.cart.purchased_at 
    end 
    if session[:cart_id].nil? 
    @cart = Cart.create(session[:cart_id]) 
    end 
    @cart 
    end 
end 

我似乎無法弄清楚爲什麼它不工作。我很感激任何關於我出錯的地方。謝謝

更新:我想'如果current_user'是真的,這是大多數時間。 else塊不會被渲染。 所以我把它更新到

class Customer::CartsController < ApplicationController 
    def show 
    @cart = if current_user 
    current_user.cart ||= Cart.find session[:cart_id] 
    session[:cart_id] = nil if current_user.cart.purchased_at 
    end 
    if session[:cart_id].nil? 
     current_user.cart = Cart.create(params[:id]) 
     session[:cart_id] = current_user.cart.id 
    end 
    current_user.cart 
    end 

仍然沒有運氣!不知道我現在做,有什麼錯....

回答

0

很難看到沒有發佈實際的錯誤,但我看到一個問題,在下面的一行:

current_user.cart = Cart.create(params[:id]) 

功能create需要一個散列作爲參數,所以你需要調用它,如下圖所示:

current_user.cart = Cart.create(:user_id => params[:id]) 

**假設ID參數是用戶ID。

檢查the create function documentation

+0

我實際上做了Cart.create的railscasts插曲!但是,當我遵循這一點時,它會弄亂購物車的視野。拋出這個錯誤>> [link](https://www.dropbox.com/s/8snff4essml1gug/error.png?dl=0) –

+0

'create'和'create!'唯一的區別在於第一次返回如果對象沒有保存到數據庫,則爲false,而在這種情況下,第二個實際引發異常。看看你的錯誤,'create!'應該在到達之前產生一個異常,所以看起來'@ cart'在'create!'和進入視圖之間被設置爲零。你是否在用「byebug」來調試?如果您一步一步調試,您會發現問題。 – aruanoc

+0

所以我改變了代碼本> 高清顯示 (AT)車=如果CURRENT_USER \t current_user.cart || = Cart.find_by(會話[:cart_id]) \t會話[:cart_id] =零,如果CURRENT_USER。 cart.purchased_at end if session [:cart_id] .nil? ! \t current_user.cart = Cart.create(USER_ID:PARAMS [:編號]) \t會話[:cart_id] = current_user.cart.id 結束 (AT)車= current_user.cart 結束 |它的工作原理,但是當cart.purchased_at是真正的車不復位... –