触发after_commit回调,但不是触发触摸

时间:2019-03-08 19:52:22

标签: ruby-on-rails

无论何时提交对象,我都试图触发回调。但是我不希望after_commit是仅被触摸的对象导致的回调触发。我研究了after_updateafter_update_commitafter_save,但是这些似乎都与我描述的行为不符。除了让我的回调从数据库中重新加载对象并在继续操作之前验证updated_at以外的列是否已被修改之外,还有其他方法吗?我在Rails 5.2上。

1 个答案:

答案 0 :(得分:0)

好吧,最后,我发现最简单的方法是捆绑ar_transaction_changes gem。那个gem保留了整个事务中对记录的更改,并允许我像这样过滤我的回调:

# only kick off job if the update is not due to a touch
after_commit :kickoff_job, on: :update, unless: -> { transaction_changed_attributes.keys == ['updated_at'] }

如果after_commit仅是触摸的结果,则不执行回调。