Ruby on Rails 订单模型 - 生成订单号、计算总金额及库存管理
app/models/order.rb class Order < ApplicationRecord belongs_to :user has_many :order_items before_create :generate_order_no
def generate_order_no prefix = Time.now.strftime('%Y%m%d%H%M%S') 10.times do self.no = "#{prefix}#{format('%06d', Random.rand(999999))}" return self.no unless Order.exists?(no: self.no) end Rails.logger.warn('find order no failed') false end
def total_amount order_items.sum { |item| item.order_item_amount } end
def create_line_items(items)
items.each do |data|
sku = ProductSku.find(data[:sku_id])
item = order_items.create!(
amount: data[:amount].to_i,
price: sku.price.to_i,
product: sku.product,
product_sku: sku
)
total_amount += sku.price.to_i * data[:amount].to_i
sku.with_lock do
sku.stock -= data[:amount].to_i
sku.save
end
end
end
end
app/models/order_item.rb
class OrderItem < ApplicationRecord
belongs_to :product
belongs_to :product_sku
belongs_to :order
def order_item_amount # amount? product_sku.price.to_i * amount.to_i end
end
原文地址: https://www.cveoy.top/t/topic/p9In 著作权归作者所有。请勿转载和采集!