我一直在讀那ActiveRecord的交易將自動纏保存和銷燬的行動。我的問題涉及以下情況。的Rails 3.2的ActiveRecord交易
我有一個庫存系統跟蹤的出貨量,並創建發貨時調整產品的庫存量。當我刪除一批貨物時,我將其編程爲將貨件數量加回到產品的庫存量。這種情況是專爲如果用戶弄髒貨物而設計的。然後刪除貨件將裝運的物品重新加入庫存。
我的問題是當product_shipments通過環是有必要提供Product.transaction塊或I可以省略此由於破壞方法被自動包裝在一個交易?像我這樣在一個事務中包裝整個循環可以嗎?如何最好地確保所有這些數據庫操作都會在出現故障時回滾?
def destroy
@shipment = Shipment.find(params[:id])
@shipments = @shipment.product_shipments
Product.transaction do
@shipments.each do |s|
@difference = -(s.qty_shipped.to_i)
Product.update_inventory_quantities(@difference, s.product_id)
end
end
@shipment.destroy
respond_with @shipment, :location => shipments_url
end
我想看看[ActiveRecord的回調(http://guides.rubyonrails.org/active_record_validations_callbacks.html#callbacks-overview)用於這種東西。 – Mischa