2012-09-04 98 views
1

所以我有兩個模型:產品銷售。槽協會都具有相同的屬性和屬性名(銷售有一個更強硬的):他們是通過的has_many相關Rails:創建其他記錄時減少表中的屬性

代碼片段:

# Product Model 

class Product < ActiveRecord::Base 
    attr_accessible :qty, :color, :name, :price, :size, :type, :code 
    has_many :orders 
    has_many :sales, :through => :orders 
end 

# Sale Model 

class Sale < ActiveRecord::Base 
    attr_accessible :qty, :color, :name, :salesman_name, :price, :size, :type, :code 
    has_many :orders 
    has_many :productos, :through => :orders 
end 

我想要做什麼是遞減產品>數量每次創建一個新銷售時,特定記錄(產品)的屬性,其名稱就會被刪除......減數必須等於新數量中設置的「數量」的值與創建的產品相關的銷售創建.. 。

該應用程序是一個非常簡單的庫存系統,我跟蹤股票項目和銷售,讓我們給一個之實踐例子:假設我有一個產品叫「襪子」在產品數據庫和我有「30」作爲該產品的數量屬性,然後有人銷售兩個襪子(在應用程序中創建一個2襪子的新銷售):在這種情況下,我希望「襪子」的值在產品數據庫中更新爲28自動。

我一直在閱讀,我認爲這可能可以通過在銷售模型中使用ActiveRecord事務進行after_create回調來完成,但我不知道如何實現這一點,有人可以幫助我嗎? 順便說一句,我想使用類似這樣的事情在這裏的東西:

after_create :decrement_stock 

    def decrement_stock 
    Sale.transaction do 
     Product.transaction do 
     @substraction = product.sale(params[:qty]) 
      product.update_attributes!(:qty => @qty - @substraction) 
    end 
    end 
end 

但我敢肯定它是行不通的,請點我在正確的方向...我我一直在努力爭取這一點。

謝謝你,祝你有美好的一天。

回答

1

我想你應該重建這個協會和模型

我會做的就是有這個模型(比你有點不同):

推銷員

class Salesman < ActiveRecord::Base 
    attr_accessible :last_name, :name 
    has_many :sales 
end 

產品

class Product < ActiveRecord::Base 
    attr_accessible :name, :qty 
    has_many :product_sales 
end 

出售

class Sale < ActiveRecord::Base 
    belongs_to :salesman 
    has_many :product_sales 
end 

而這裏的竅門

型號ProductSale

class ProductSale < ActiveRecord::Base 
    belongs_to :sale 
    belongs_to :product 
    attr_accessible :qty 

    after_create :decrement_stock 

    def decrement_stock 
    self.product.update_attribute("qty", (product.qty - self.qty)) 
    end 
end 

有你有銷售該belongs_to推銷員。

has_manyproduct_sales

product_sales belongs_to的productsales銷售於一體這樣,你有多個產品

然後,當ProductSale保存有回調after_create :decrement_stock

而且可以更新屬性針對該特定產品。

請記住,您將有每個產品的數量,而不是整個銷售。

這裏有一個小例子,我爲你設置:

https://github.com/Mr-Nizzle/inventory

+0

ERES EL MEJOR:')誤respetos ... – Jmlevick

相關問題