2012-09-04 50 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

相关问题