2017-09-22 3 views
0

私はOrderItemに、SaleOrderItem及び方法は、メソッドを保存した後、以下の場合Railsは動作しないafter_save(レール - 3.2.22.1)

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

で呼び出されていないセーブ

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 

後PurchaseOrderItemモデルを持っています以下の場合に呼び出されます

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

誰でもコメントがありますか?

+2

あなたは、具体的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は、いくつかのケースで呼び出されていない修正されます、次のようにすべきですか?いくつかの基本的なトラブルシューティングでは、 'io.save! 'を大声で失敗させてください。 – user3366016

+0

あなたは 'after_save'を呼び出さなかったのでしょうか? 'oi'と' oi2'は同じですか? – EJ2015

+0

@ user3366016 質問に追加した情報を追加しました。解決策が見つかりました。細かいことをお詫びし、あなたが私を助けるために過ごした時間に感謝します。 –

答えて

0

解決策が見つかりましたafter_saveメソッドは、OrderItemモデルではなくSaleOrderItemモデルとPurchaseOrderItemモデルの両方で呼び出す必要があります。だから、

関連する問題