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 ....
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) –
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
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 ... –