我试图在Ruby on Rails中构建购物车应用程序。该模型如下:用户有很多交货,交货有很多order_items,产品有很多order_items。
我试图让非登录用户制作购物车,只有在他们购物后,用户必须注册或登录才能提交订单(购物车)。
因此,我在ApplicationController中帮助确定当前交付:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
helper_method :current_delivery
def current_delivery
if !session[:delivery_id].nil?
Delivery.find(session[:delivery_id])
else
Delivery.new
end
end
end
在oder_items控制器中,我进行了创建操作:
class OrderItemsController < ApplicationController
def create
@delivery = current_delivery
@order_item = @delivery.order_items.new(order_item_params)
@delivery.save
session[:delivery_id] = @delivery.id
end
...
end
当有人点击添加到购物车按钮时,会触发order_item的创建操作:
$(".cart-text").html("<%= escape_javascript(render 'layouts/cart_text') %>")
问题在于,当用户将order_item(点击添加到购物车按钮)添加到空购物车时,会创建多个交货(4-12)。如何只获得一个新的交付而不是多个交付?