1

所以我有两个模型:ProductSale。它们通过has_many :trough关联关联,并且都具有相同的属性和属性名称(sale 有一个更难的):

代码片段:

# 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

我想要做的是在每次创建带有名称的新销售时减少特定记录(产品)的Products>Quantity属性......减法必须等于“数量”中设置的值与已创建产品相关的新销售创建...

该应用程序是一个非常简单的库存系统,我可以在其中跟踪库存商品和销售情况,让我们举一个实际的例子:假设我在产品数据库中有一个名为“袜子”的产品,我有“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

但我很确定它不会起作用,请指出正确的方向......我一直在努力解决这个问题。

感谢,并有一个愉快的一天。

4

1 回答 1

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

这就是诀窍

模型产品销售

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_many product_sales

product_salesbelongs_toproduct这样sales在一次销售中你就有多个产品

然后当 aProductSale被保存时,会有回调after_create :decrement_stock

您可以更新该特定产品的属性。

请记住,您将拥有每个产品的数量,而不是整个销售的数量。

这是我为您设置的一个小示例:

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

于 2012-09-04T20:32:19.047 回答