Ruby on Rails 中 Order 模型的优化:计算订单总金额的最佳实践

在 Ruby on Rails 的 Order 模型中,create_line_items 方法负责创建订单项并计算订单总金额。本文将介绍如何优化该方法,使代码更简洁、高效。

问题:create_line_items 方法中,total_amount 变量的定义和累加操作分散在整个方法中,代码可读性较差。

解决方案:total_amount 定义为一个局部变量,并在 create_line_items 方法内部累加每个 item 的总金额。最后,在 create_line_items 方法外部返回该 total_amount 值。

以下是修改后的代码示例:

class Order < ApplicationRecord
  belongs_to :user
  has_many :order_items

  before_create :generate_order_no
  after_create :closed_job

  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 create_line_items(items)
    total_amount = 0
    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

    total_amount
  end


end

使用方法:

items = [{ sku_id: 1, amount: 2 }, { sku_id: 2, amount: 3 }]
total_amount = create_line_items(items)
puts total_amount

优点:

  • 代码更简洁、易读
  • 提高了代码效率,避免了不必要的变量访问
  • 增强代码可维护性

总结: 通过将 total_amount 定义为局部变量并在方法内部进行累加计算,可以有效地优化 create_line_items 方法,提高代码质量和效率。

Ruby on Rails 中 Order 模型的优化:计算订单总金额的最佳实践

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

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