2016-05-13 28 views
0

Grundsätzlich i der Railscasts Paypal Grund Tutorial verfolgt haben und nach ein Wagen wie gekauft markiert ist, müssen Sie Session zurücksetzen [: cart_id] = nilZurücksetzen Wagen nach mark_cart_as_purchased

Hier ist mein Code

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 

Ich kann nicht herausfinden, warum es nicht funktioniert. Ich würde mich über Hinweise freuen, wo ich falsch gelaufen bin. Danke

UPDATE: Ich dachte, wenn der 'If current_user' wahr ist, was die meiste Zeit ist. Der Else-Block wird nicht gerendert. So ich es

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 

Ende

Noch kein Glück zu

aktualisiert! Keine Ahnung, was ich tue jetzt falsch ....

Antwort

0

Schwer zu sehen, ohne die tatsächlichen Fehler zu veröffentlichen, aber ich sehe ein Problem in der Zeile unter:

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

Die Funktion create nimmt einen Hash unter der Annahme, dass die ID param ist die Benutzer-ID

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

** : als Argument, so müssen Sie sie nennen, wie unten gezeigt.

Überprüfen Sie the create function documentation.

+0

Die Railscasts-Folge, die ich verfolgt habe, hat Cart.create tatsächlich gemacht! Aber wenn ich dem folge, vermasselt es den Blick auf den Wagen. Wirf diesen Fehler auf >> [link] (https://www.dropbox.com/s/8snff4essml1gug/error.png?dl=0) –

+0

Der einzige Unterschied zwischen 'create' und' create! 'Ist, dass der erste zurückkommt false, wenn das Objekt nicht in der Datenbank gespeichert wird, während die zweite in diesem Fall eine Ausnahme auslöst. Wenn du deinen Fehler ansiehst, sollte 'create!' Eine Exception ausgelöst haben, bevor es dorthin gelangt. Es sieht also so aus, als ob '@ cart' zwischen' create! 'Und 'n' zur Ansicht zurückkehrt. Verwenden Sie etwas wie "byebug" zum Debuggen? Wenn Sie Schritt für Schritt debuggen, finden Sie das Problem. – aruanoc

+0

Also änderte ich den Code zu diesem> def (at) Warenkorb = wenn current_user \t current_user.cart || = Cart.find_by (session [: cart_id]) zeigen \t session [: cart_id] = nil wenn current_user. cart.purchased_at Ende wenn Sitzung [: cart_id] .nil? ! \t current_user.cart = Cart.create (user_id: params [: id]) \t session [: cart_id] = current_user.cart.id Ende (at) Warenkorb = current_user.cart Ende | Es funktioniert, aber der Wagen nicht zurückgesetzt, wenn cart.purchased_at wahr ist ... –

Verwandte Themen