Ruby on rails 如何从一个模型上的事务中检测所有更改,该模型进行多次更新,并使用after_commit钩子在提交时触发
我目前正在尝试在ruby服务文件中的事务完成后创建缓存更新,这取决于通过使用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
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更改是上次更新的键,本例为作者
。因此,即使这些值刚刚更新,也没有运行某些代码。我不知道如何将以前的更新与事务中以前的更改一起包含在中。能否添加一些代码片段以更好地理解上下文/问题?是否要在单个属性的同一事务中记录多个更新?我进行了更新。希望这足够有帮助。如果没有,请告诉我。准确地说,为了能够从模型的回调方法中检查这些更改,我认为您的意思是在提交后,而不是在注释后。是的,很好。我的意思是在你承诺之后。抱歉,有任何困惑您真的需要在这里使用回调吗?服务的主要优点是,您可以精确地控制何时触发逻辑。