2016-05-13 3 views
0

В принципе я уже после Railscasts Paypal Основного учебника и после того, как телега помечаются как купил, вам нужно сбросить сессии [: 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 

Я не могу понять, почему он не работает. Я был бы признателен за любые указания относительно того, где я ошибся. Спасибо

UPDATE: Я понял, когда «if 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]) 

** Если предположить, что пары идентификатора идентификатор пользователя.

Проверить the create function documentation.

+0

Эпизод railscasts, в который я следил, действительно сделал Cart.create! Но когда я следую за этим, это искажает вид тележки. Выбрасывает эту ошибку >> [link] (https://www.dropbox.com/s/8snff4essml1gug/error.png?dl=0) –

+0

Единственная разница между 'create' и' create! 'Заключается в том, что первая возвращает false, если объект не сохраняется в БД, а второй фактически вызывает исключение в этом случае. Глядя на вашу ошибку, 'create!' Должно было создать исключение перед тем, как попасть туда, поэтому похоже, что '@ cart' возвращается к нулю между' create! 'И получением представления. Вы используете что-то вроде «byebug» для отладки? Если вы отлаживаете шаг за шагом, вы найдете эту проблему. – aruanoc

+0

Так я изменил код этого> Защиту показать (в) корзинка = если current_user \t current_user.cart || = Cart.find_by (сессия [: cart_id]) \t сессия [: cart_id] = ноль, если current_user. cart.purchased_at конец если сеанс [: cart_id] .nil? ! \t current_user.cart = Cart.create (user_id: Титулы [: идентификатор]) \t сессия [: cart_id] = current_user.cart.id конец (в) = телега current_user.cart конец | Это работает, но тележка не сбрасывается при cart.purchased_at верно ... –

Смежные вопросы