ActiveRecord 回滚后的回调函数未触发。

3
自从升级到Rails 6后,我无法触发after_rollback回调。 我已经验证了这在Rails 6.0.3.66.1.3.1上不起作用。 感谢您的帮助!
class User < ActiveRecord::Base

  after_rollback do |user|
    puts "You have rolled back!"
  end

  validates_presence_of :name
end


> User.first.update!(name: nil)
ActiveRecord::RecordInvalid (Validation failed: Name cant be blank)

> User.create!
ActiveRecord::RecordInvalid (Validation failed: Name cant be blank)

根据文档after_rollback 应在 创建、更新或删除被回滚后 触发。

请粘贴您的Rails日志以查看是否真的有“ROLLBACK”。 - Siwei
https://github.com/rails/rails/issues/36965 这似乎是一个已知问题。 - Eyeslandic
1
@max 是的,当它出现故障时,它应该触发回滚。因此,当您创建/更新/删除时,它应该始终调用 after_commit 或 after_rollback。 - Tom Rossi
1个回答

0

默认的数据库事务只有在成功验证要保存的实体后才会打开,除非你手动打开它们。尝试:

User.transaction do
  User.first.update!(name: nil)
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接