Rails After_Save无法正常工作(Rails -3.2.22.1)



我有OrderItem,saleorderitem和paskureorderitem型号

class SaleOrderItem < OrderItem
  self.table_name = "order_items"
end
class PurchaseOrderItem < OrderItem
   self.table_name = "order_items"
end
class OrderItem < ActiveRecord::Base
  after_save :update_order
  def update_order
    is_pending = ord.order_items.
      where(state: [SaleOrderItem.on_orde, SaleOrderItem.carter]).count > 0
    self.order.update_column(:any_pending_order_items, is_pending)
  end
end

在以下情况下未调用保存方法之后

so = SaleOrder.first
oi = so.order_items.first
oi.save   << This is not calling after_save on order items

在以下情况下调用保存方法之后

oi2 = OrderItem.find(oi.id)
oi2.save << This calls after_save on order items

有人评论吗?

我找到了解决方案应在saleOrderItem和paskureorderItem模型而不是OrderItem模型上调用After_Save方法。所以应该像遵循

class SaleOrderItem < OrderItem
  after_save :update_order << Here after_save added
  self.table_name = "order_items"
end
class PurchaseOrderItem < OrderItem
   after_save :update_order << Here after_save added
   self.table_name = "order_items"
end
class OrderItem < ActiveRecord::Base
              << Here after_save removed
  def update_order
    is_pending = ord.order_items.
      where(state: [SaleOrderItem.on_orde, SaleOrderItem.carter]).count > 0
    self.order.update_column(:any_pending_order_items, is_pending)
  end
end

在某些情况下,这将无法修复after_save

最新更新