【发布时间】:2021-04-01 20:46:00
【问题描述】:
自从升级到 Rails 6 后,我无法触发 after_rollback 回调。我已经验证这不适用于 Rails 6.0.3.6 或 6.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)
根据documentation,after_rollback 应该在创建、更新或销毁回滚后触发
【问题讨论】:
-
请粘贴你的rails日志看看是否真的有
ROLLBACK。 -
github.com/rails/rails/issues/36965 这似乎是一个已知问题
-
@max 是的,当它退出时,它应该触发回滚。因此,当您创建/更新/删除它时,应该始终调用 after_commit 或 after_rollback。
标签: ruby-on-rails rails-activerecord ruby-on-rails-6