2014-07-03 82 views
2

我還有大約25件商品被表示爲product.stock = 25。假設我出售這種特定產品的5種。然後我需要將剩餘的庫存條目更新爲25 - 5 = 20product.stock = product.stock - purchase.quantityRails 4 - 更新多個表格條目

我該如何在我的應用程序中執行此操作。我會把上面的代碼放在我的控制器的某個地方嗎?

我有迎合採購形式如下:

  • 可以選擇現有的產品,獲取產品提價的
  • 指定數量量的用戶想購買
  • 顯示選擇購買的所有產品的總數和總數

我不知道我在這裏是否清楚,或者如果主題與我的問題相關。

+0

只是爲了澄清事情:你有一個觀點,有人試圖出售5件物品,對嗎?他們用「5」填寫一個框,然後點擊提交? – MCBama

+0

是@Micah,這是正確的。 – kadhim

回答

2

我會使用ActiveRecord的decrement!方法:

product.decrement!(:stock, purchase.quantity) 

如果購買的型號是什麼跟蹤最終成交的話,我會將此代碼放在一個ActiveRecord的回調。例如:

class Purchase < ActiveRecord::Base 
    belongs_to :product 

    after_create :adjust_inventory 

    def adjust_inventory 
    product.decrement!(:stock, quantity) 
    end 
end 

採購也應該有一個before_save驗證,以確保足夠的庫存的存在是爲了滿足訂單。

+0

我打算創建回購訂單並進行更新,以便我們對特定訂單的庫存低。謝謝你,這個問題的目的,我現在試圖找出':back_order'和'before_save'。 – kadhim

+0

我已經發布了對此問題的延續:https://stackoverflow.com/questions/24565599/rails-4-updating-multiple-table-entries-products-and-backorder – kadhim

0

遞減你的股票的方法應在產品型號

def decrement_stock(qty) self.stock = self.stock - qty self.save end

在你的控制器來實現,你應該叫基於您的PARAMS此方法。

purchase_controller.rb

def update @product = Product.find(params[:id]) # Add validation to make sure you have any stock @product.decrement_stock(params[:quantity]) # Add other things you need to do and return the @product end

這是一個相當簡化版本。實際上你應該有一個Order模型,一個OrderLine模型和一個Product。

+0

和我在哪裏可以調用該函數? – kadhim

+0

我提供了答案 – Rafal

+2

我會爭辯說,也許應該在控制器中完成保存...或者decrement_stock方法應該使用感嘆號...或者可能兩者都是 – user3334690