Ruby on rails 如何从一个模型上的事务中检测所有更改,该模型进行多次更新,并使用after_commit钩子在提交时触发

Ruby on rails 如何从一个模型上的事务中检测所有更改,该模型进行多次更新,并使用after_commit钩子在提交时触发,ruby-on-rails,activerecord,callback,Ruby On Rails,Activerecord,Callback,我目前正在尝试在ruby服务文件中的事务完成后创建缓存更新,这取决于通过使用saved\u change\u to\u attributes方法检查哪些字段刚刚更新而更新的字段。但之前捕获的_更改仅是该事务中调用的最后一次更新的更改 提交完成后,是否有方法从该回调方法检查该事务中以前的所有更改 /comment_service.rb class CommentService < ApplicationService def submit ... comment.tra

我目前正在尝试在ruby服务文件中的事务完成后创建缓存更新,这取决于通过使用
saved\u change\u to\u attributes
方法检查哪些字段刚刚更新而更新的字段。但之前捕获的_更改仅是该事务中调用的最后一次更新的更改

提交完成后,是否有方法从该回调方法检查该事务中以前的所有更改

/comment_service.rb
class CommentService < ApplicationService
  def submit
    ...

    comment.transaction do
      comment.update!(is_submitted: true)

      if condition
        user.update!(author: true)
      end
    end

  end
end

---

/comment.rb

class Comment < ApplicationRecord

  after_commit :update_counter_caches

  def update_count_caches
    ...
    if saved_change_to_is_submitted?
      (do something)
    end
  end
end
/comment\u service.rb
类CommentService

问题在于方法
保存的\u change\u to \u已提交
返回nil,并且从事务中捕获的唯一先前的\u更改是上次更新的键,本例为
作者
。因此,即使这些值刚刚更新,也没有运行某些代码。我不知道如何将以前的更新与事务中以前的更改一起包含在中。

能否添加一些代码片段以更好地理解上下文/问题?是否要在单个属性的同一事务中记录多个更新?我进行了更新。希望这足够有帮助。如果没有,请告诉我。准确地说,为了能够从模型的回调方法中检查这些更改,我认为您的意思是在提交后
,而不是在注释后
。是的,很好。我的意思是在你承诺之后。抱歉,有任何困惑您真的需要在这里使用回调吗?服务的主要优点是,您可以精确地控制何时触发逻辑。