【问题标题】:ActiveRecord after_rollback callback not triggeredActiveRecord after_rollback 回调未触发
【发布时间】:2021-04-01 20:46:00
【问题描述】:

自从升级到 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)

根据documentationafter_rollback 应该在创建、更新或销毁回滚后触发

【问题讨论】:

  • 请粘贴你的rails日志看看是否真的有ROLLBACK
  • github.com/rails/rails/issues/36965 这似乎是一个已知问题
  • @max 是的,当它退出时,它应该触发回滚。因此,当您创建/更新/删除它时,应该始终调用 after_commit 或 after_rollback。

标签: ruby-on-rails rails-activerecord ruby-on-rails-6


【解决方案1】:

默认数据库事务仅在成功验证要保存的实体后打开,除非您手动打开它们。 试试

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多