2017-05-10 70 views
0

我正在構建一個庫存管理系統,該庫存管理系統由一個數量值包含多個事務的產品表組成,其中包含多個事務以記錄庫存是如何添加到系統中的。將數據從控制器中的對象傳遞到模型方法

交易一旦創建,產品表上的數量(庫存量)就需要重新計算。我正在尋找最好的方式做到這一點

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並獲取需要更改的數量值。

update_stock_on_hand的結果是否應該傳遞迴控制器並保存在控制器中,或者我可以在模型中執行所有操作嗎?如果是後者,最好的方法是什麼?

回答

0

首先,我認爲transaction是一個給類,變量之間的任何東西的壞名字,因爲事務是一個保留字的軌道,我認爲這是一個好主意,以避免它。

關於您的問題:有多個選項來處理這個問題,我會在您的transaction模型上使用回調。因爲我相信你有ProductTransaction,你將有product_id屬性您Transaction對象上foreign_key之間的has_many關係,你可以做這樣的事情:

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持有該產品的數量屬性你有庫存。這裏發生的情況是,每次創建上述交易對象時,都會使用當前數量(即已分配的數量)更新產品對象。方法dispense_product內的self指的是剛創建的Transaction對象。

希望能幫到你!

相關問題