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