Ruby on rails Rails是否允许自定义事务提交和回滚ruby代码?

Ruby on rails Rails是否允许自定义事务提交和回滚ruby代码?,ruby-on-rails,Ruby On Rails,作为单个ActiveRecord事务的一部分(我使用的是PostgreSQL数据库),我希望有常规的非数据库代码,只有在事务提交或回滚成功时才执行。我设想将某种进程传递给ActiveRecord::Base.transaction,它将根据事务提交或回滚执行相应的进程。我是Rails新手,想知道是否提供了这样的功能 我试图解决的一般问题是,仅当我自己的“流程”成功时,才向第三方服务发送web请求,但如果事务失败,还能够“回滚”网络调用(通过单独的回滚请求)。是。单个记录可以定义在提交或回滚事务后

作为单个ActiveRecord事务的一部分(我使用的是PostgreSQL数据库),我希望有常规的非数据库代码,只有在事务提交或回滚成功时才执行。我设想将某种进程传递给
ActiveRecord::Base.transaction
,它将根据事务提交或回滚执行相应的进程。我是Rails新手,想知道是否提供了这样的功能


我试图解决的一般问题是,仅当我自己的“流程”成功时,才向第三方服务发送web请求,但如果事务失败,还能够“回滚”网络调用(通过单独的回滚请求)。

是。单个记录可以定义在提交或回滚事务后触发的记录。它们还可以根据特定操作(如创建或销毁记录)进行定制

class Thing < ApplicationRecord
  after_commit :cleanup_that_thing, on: :destroy
  after_rollback :the_thing_wont_die, on: :destroy

  private def cleanup_that_thing
    ...
  end

  private def the_thing_wont_die
    ...
  end
end

可能在保存后使用模型回调,例如

begin
  YourModel.transaction do
    ...
  end
rescue
  # it didn't work
else
  # it did work
end