我有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