仅在创建时使用 after_commit

问题描述 投票:0回答:3

我有一个带有

after_commit
的 UserObserver(从
after_create
更改以避免 id 未找到的竞争条件错误)来更新计数。但我知道对于每个创建,更新都会执行
after_commit
代码(我知道会发生)。如何仅在创建时运行
after_commit
?我的解决方案很少,但有点困惑。我试过了:

  1. 在模型中使用
    after_commit :do_something, :on => :create
  2. 检查观察者中的
    created_at
    updated_at
    ;如果相同,那就是新记录。
  3. 使用
    user.new_record?

我很困惑,因为我想使用第三个,但它不起作用,我不知道为什么。我只想使用观察者而不是模型。对此有什么想法吗?

ruby-on-rails ruby-on-rails-3 observers
3个回答
15
投票

从rails 5开始,Rails添加了三个新的别名来处理这种情况:

after_create_commit
after_update_commit
after_destroy_commit

根据您自己的具体情况,您可以使用:

after_create_commit :do_something
.



2
投票

仅供参考,接受的答案在许多版本的 Rails 中不起作用,并且是一个错误。此票证引用了具有相同名称的多个回调的不同问题。然而,在许多 Rails 版本中,该错误仍然存在(任何 after_commit on:create 都不起作用)。

“seako”有一个解决方法来解决这个问题(如果您遇到此问题)

https://github.com/rails/rails/issues/988

after_commit ->(obj) { obj.do_something }, on: :create
© www.soinside.com 2019 - 2024. All rights reserved.