Rails的after_commit和transaction_include_any_action?

了解rails的,都知道activerecord有一个after_commit的回调方法,可以在这个方法里做一下提交后的操作,比如同步数据等。
但是如果要区分本次commit是create、update还是delete怎么做呢?
有两种方式:
第一种方式是写多个方法分布处理

  after_commit :hook_on_create, :on => :create
  after_commit :hook_on_update, :on => :update
  after_commit :hook_on_destroy, :on => :destroy

通过这样可以写三个回调方法分别处理不同的数据。
第二种方式是在同一个方法里,通过判断当前操作的类型来分别处理,这个时候transaction_include_any_action?就要上场了。

after_commit :sync_data
  private

  def sync_data
    if(transaction_include_any_action?([:create]))
       do_something1
       return
    end

    if(transaction_include_any_action?([:update]))
      do_something2
      return
    end

    if(transaction_include_any_action?([:destroy]))
      do_something3
      return
    end
  end

另外transaction_include_any_action?是rails4的方法,rails3中,对应的方法是transaction_include_action?
这两种方法我个人还是推荐第一种,毕竟解耦和代码就是注释是rails的设计原则,后者里面的判断逻辑还是要看代码才行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值