代码之家  ›  专栏  ›  技术社区  ›  Raghuram Murthy P

在ActiveRecord::Relation delete_by方法上不调用after_commit和after_destroy回调

  •  1
  • Raghuram Murthy P  · 技术社区  · 2 年前

    我正在使用ActiveRecord::Relation delete_by 方法删除记录,但这不会触发 after_commit after_destroy 回电。请参见以下示例:

    class User < ActiveRecord::Base
      after_commit :expire_cache
      after_destroy :expire_cache
    
      def expire_cache
        puts "expire_cache is called"
      end
    end
    
    User.delete_by(user_id: 1234) # doesn't trigger expire_cache method
    

    我对回调的预期是对的吗?我做错了什么?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Gupta    2 年前

    我对回调的预期是对的吗?

    不,你希望用 delete_by 这是错误的。

    我做错了什么?

    你的理解与博士不符。

    根据文件, skipping-callbacks delete_all 将跳过 callbacks

    • 全部删除 与验证一样,也可以跳过回调。
    • 但是,应该谨慎使用这些方法,因为重要的业务规则和应用程序逻辑可能会保留在回调中。在不了解潜在影响的情况下绕过它们可能会导致无效数据。