after_initialize
它会在数据初始化和 数据库中加载数据 时执行。
after_find
在找到数据后执行
after_touch
1、在执行touch方法后执行
2、如果在关联中开启,关联model也会执行
class User < ApllicationRecord
has_many :products
after_touch do
puts 'user 的 touch 回调'
end
end
class Product < AppliactionRecord
belongs_to :user,touch: true # 注意这里,需要开启才会触发到user
after_touch do
puts 'product 的touch 回调'
end
end
p = Product.first
p.touch
#product 的touch 回调
#user 的 touch 回调
after_commit/rollback
1、它们在数据库变更已经提交或回滚后才会执行(也就是已经引发数据库的改动后)
2、一般用于和数据库事务系统之外的交互(目的是防止在事务中发生异常,而提前于外部系统发生数据改变,回滚时,外部系统不能正常回滚,导致数据不一致)
3、通常还有下面(带场景的触发)
after_create_commit
after_update_commit
after_destroy_commit
网友评论