新手问题 在 after_commit 里如何判断当前操作是通过 [:create, :destroy, :update] 中的哪一个进来的?

jmmbite · July 12, 2018 · Last by theblock24block replied at July 12, 2018 · 1790 hits
after_commit :do_something, on: [:create, :update, :destroy]
def do_something
  # 在这里是否可以知晓,是 ACTIONS = [:create, :destroy, :update] 中的哪个触发的吗?
end

参考如下:

# https://github.com/rails/rails/blob/master/activerecord/lib/active_record/transactions.rb

# Determine if a transaction included an action for :create, :update, or :destroy. Used in filtering callbacks.
def transaction_include_any_action?(actions)
  actions.any? do |action|
    case action
    when :create
      persisted? && @_new_record_before_last_commit
    when :update
      !(@_new_record_before_last_commit || destroyed?) && _trigger_update_callback
    when :destroy
      _trigger_destroy_callback
    end
  end
end

分三次配置?

do_something_on_create[update, destroy]

Reply to pynix

就是因为不想分 3 次😂

jmmbite closed this topic. 12 Jul 20:55
You need to Sign in before reply, if you don't have an account, please Sign up first.