所以我有两个模型:Product和Sale。它们通过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
但我很确定它不会起作用,请指出正确的方向......我一直在努力解决这个问题。
感谢,并有一个愉快的一天。