最近做一个电子商务平台练手。设计要求:只有用户登陆以后才能购物,每个注册的用户要有自己的购物车,相同用户再次登录以后购物车里边的物品还在,不知道怎么来实现。
购物车是参考《敏捷开发》那本书里边的购物车,但是每次不同的用户登录上去以后,他的购物车里边是同样的商品。
| id | user_id | created_at | updated_at |
+----+---------+---------------------+---------------------+
| 4 | NULL | 2013-10-09 09:19:30 | 2013-10-09 09:19:30 |
似乎这个方法需要修改,我一直没能该对
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
因为当购物车 cart 为空时,就会报错。可能是由于 cart 模型验证,user_id 为空,cart 没能建立。但奇怪的是 line_items 表中数据会写入,此时 cart_id 为空。
控制器代码 cart_controller.rb
def create
@cart = Cart.new(cart_params)
respond_to do |format|
if @cart.save
format.html { redirect_to @cart, notice: 'Cart was successfully created.' }
format.json { render action: 'show', status: :created, location: @cart }
else
format.html { render action: 'new' }
format.json { render json: @cart.errors, status: :unprocessable_entity }
end
end
def cart_params
params.require(:cart).permit(:user_id)
# :cart.user_id = current_user.id
end
line_items_controller.rb
def create
@cart = current_cart
# @cart = Cart.new()
flower = Flower.find(params[:flower_id])
@line_item = @cart.add_flower(flower.id)
# @line_item = @cart.line_items.build(:flower => flower)
if @line_item.save
redirect_to @line_item.cart
# redirect_to flowers_url
else
render 'new'
end
end