ruby-on-rails - 知道什么事件触发了 ActiveRecord 模型的 after_commit

标签 ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord

我有以下片段:

class Product
 after_commit :do_something, on: %i(update create)

 def do_something
   if # update
     ...
   else # create
     ...
   end
 end
end

如何知道什么事件触发了此处的提交后?

请不要告诉我在提交后有 2 个:

after_commit :do_something_on_update, on: :update
after_commit :do_something_on_create, on: :create

最佳答案

ActiveRecord uses transaction_include_any_action? :

def do_something
  if transaction_include_any_action?([:create])
    # handle create
  end
  if transaction_include_any_action?([:update])
    # handle update
  end
end

一个事务可以包含多个操作。如果 :create:update 都可以在程序的同一个事务中使用,则需要两个 if,而不是 if/其他

关于ruby-on-rails - 知道什么事件触发了 ActiveRecord 模型的 after_commit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100451/

相关文章:

ruby-on-rails - Group by 和 order by 在 Rails 中有很多直通模型

ruby-on-rails - Rails 3.1 Assets 管道和缓存

ruby-on-rails - 猴子修补 use_ssl= 方法适用于 Net :HTTP but not for OpenURI in Ruby 1. 9.3?

css - 尝试删除 Bootstrap ,现在无法更改任何 CSS

ruby-on-rails - 使用 link_to 帮助程序在新窗口中打开链接

sql - 在自定义条件下清理 SQL

ruby-on-rails - 系统范围的验证回调

sql - rails 包含不同的值

ruby-on-rails - Ruby 测试覆盖率映射工具

javascript - Rails 4 - Toaster 通知而不是 flash 通知