1

だから私は2つのモデルを持っています:製品販売。それらはhas_many:troughアソシエーションを介して関連付けられており、両方とも同じ属性と属性名を持っています(販売にはもう1つ難しい):

コードスニペット:

# 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つの靴下を販売します(アプリで2つの靴下を使用して新しい販売を作成します)。その場合、Productsデータベースで「Socks」の値を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

そしてここにトリックがあります

モデル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_many product_sales

そしてproduct_salesbelongs_toproductsalesそのように1つの販売であなたは複数の製品を持っています

次に、aProductSaleが保存されると、コールバックがありますafter_create :decrement_stock

そして、その特定の製品の属性を更新できます。

販売全体ではなく、製品ごとに数量があることを忘れないでください。

これが私があなたのために設定した小さな例です:

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

于 2012-09-04T20:32:19.047 に答える