我正在建立一个库存管理系统,该系统由一个产品表组成,其数量值包含许多交易,用于记录库存的添加方式。
创建交易后,需要重新计算产品表上的数量(库存)。我正在寻找最好的方法来做到这一点
current_product = Product.find_by_id(product_id)
transaction = current_product.transactions.create(
:qty => 10,
:value => 5.00,
)
#once a transaction has been created it needs to reclcuate the SOH value at the SKU level
current_product.update_stock_on_hand(transaction.id)
我不确定如何在产品模型中编写update_stock_on_hand
方法。目前,它查找刚刚创建的事务id并获取需要更改的qty值。
update_stock_on_hand
的结果应该传回控制器并保存在那里,还是可以在模型中完成所有操作?如果是后者,最好的方法是什么?
答案 0 :(得分:0)
首先,我认为transaction
对于类,变量等之间的任何东西都是一个坏名称,因为事务是rails的保留字,我认为避免它是个好主意。
关于您的问题:有多个选项可以解决这个问题,我会在您的transaction
模型上使用回调。由于我认为您在has_many
和Product
之间存在Transaction
关系,并且您product_id
对象的Transaction
属性为foreign_key
,可以做这样的事情:
class Transaction < ApplicationRecord
after_create :dispense_product
def dispense_product
self.product.update_attribute(:in_stock, product.in_stock - self.qty)
end
end
考虑in_stock
包含您库存产品数量的属性。这里发生的是,每次创建如上所述的事务对象时,您将使用当前数量更新产品对象 - 您分配的数量。方法self
内的dispense_product
引用刚创建的Transaction
对象。
希望能帮到你!