将数据从控制器中的对象传递到模型方法

时间:2017-05-10 20:35:45

标签: ruby-on-rails model-view-controller

我正在建立一个库存管理系统,该系统由一个产品表组成,其数量值包含许多交易,用于记录库存的添加方式。

创建交易后,需要重新计算产品表上的数量(库存)。我正在寻找最好的方法来做到这一点

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的结果应该传回控制器并保存在那里,还是可以在模型中完成所有操作?如果是后者,最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,我认为transaction对于类,变量等之间的任何东西都是一个坏名称,因为事务是rails的保留字,我认为避免它是个好主意。

关于您的问题:有多个选项可以解决这个问题,我会在您的transaction模型上使用回调。由于我认为您在has_manyProduct之间存在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对象。

希望能帮到你!

相关问题