在mark_cart_as_purchased之后重置购物车

时间:2016-05-13 09:04:48

标签: ruby-on-rails ruby-on-rails-4 railscasts

基本上我一直在关注RailsCasts Paypal Basic教程,在购物车标记为已购买后,您需要重置会话[:cart_id] = nil

这是我的代码

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

我似乎无法弄清楚为什么它不起作用。我会很感激任何关于我出错的地方。谢谢

更新:我想当'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

仍然没有运气!不知道,我现在做错了什么......

1 个答案:

答案 0 :(得分:0)

很难看到没有发布实际错误,但我在下面的行中看到了一个问题:

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

函数create将哈希作为参数,因此您需要调用它,如下所示:

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

**假设id参数是用户ID。

检查the create function documentation