Rails 订单创建控制器 - OrdersController
class OrdersController < ApplicationController def store user = current_user # 开启一个数据库事务 order = ActiveRecord::Base.transaction do address = UserAddress.find(params[:address_id]) # 更新此地址的最后使用时间 address.update(last_used_at: Time.now) # 创建一个订单 order = Order.new( address: { address: address.full_address, zip: address.zip, contact_name: address.contact_name, contact_phone: address.contact_phone }, remark: params[:remark], total_amount: 0 ) # 订单关联到当前用户 order.user = user # 写入数据库 order.save!
total_amount = 0
items = params[:items]
# 遍历用户提交的 SKU
items.each do |data|
sku = ProductSku.find(data[:sku_id])
# 创建一个 OrderItem 并直接与当前订单关联
item = order.items.build(
amount: data[:amount],
price: sku.price
)
item.product = sku.product
item.product_sku = sku
item.save!
total_amount += sku.price * data[:amount]
end
# 更新订单总金额
order.update(total_amount: total_amount)
# 将下单的商品从购物车中移除
sku_ids = items.pluck(:sku_id)
user.cart_items.where(product_sku_id: sku_ids).destroy_all
order
end
render json: order
end end
原文地址: https://www.cveoy.top/t/topic/p0cc 著作权归作者所有。请勿转载和采集!