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

Rails 订单创建控制器 - OrdersController

原文地址: https://www.cveoy.top/t/topic/p0cc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录