Rails ActiveRecord:after_update与after_touch的区别及触发规则咨询
Rails 中 after_update 与 after_touch 回调触发逻辑说明
你说得对,after_update 和 after_touch 并非同义,二者功能虽有相似性,但触发场景存在明确区别,针对你的问题解答如下:
问题1:执行touch操作时,after_update会触发吗?
会触发。touch方法的本质是更新模型的updated_at(或自定义指定的字段),属于标准的更新操作范畴,因此会触发after_update回调。问题2:执行更新操作时,after_touch会触发吗?
不会触发。after_touch是专门针对touch动作的回调,仅在显式调用touch方法(包括关联对象的touch操作)时才会被触发,普通的字段更新操作(比如update、update_attributes方法)不会触发该回调。
示例验证
class User < ApplicationRecord after_update :log_update after_touch :log_touch def log_update puts "after_update 已触发" end def log_touch puts "after_touch 已触发" end end # 执行touch操作 user = User.first user.touch # 控制台输出: # after_update 已触发 # after_touch 已触发 # 执行普通更新操作 user.update(nickname: "新昵称") # 控制台输出: # after_update 已触发
内容的提问来源于stack exchange,提问作者Jon Lawton
相关产品推荐
相关产品推荐

