だから私は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
しかし、それはうまくいかないと確信しています。正しい方向に私を向けてください...私はこれに少し苦労しています。
ありがとう、そして良い一日を。