Rails 一个旧项目升级到 rails7,代码中的事务部分竟然跳过不执行了?

stephen · December 29, 2024 · Last by koell replied at December 30, 2024 · 403 hits

一个旧项目升级到 rails7,代码中的事务部分竟然跳过不执行了?难道还有什么开关设置? 数据库是 mysql,模式是 InnoDB

begin
      puts 0
      ActiveRecord::Base.transaction do
        puts 0
        a = dish_order.update!(status: :checkouted, pay_at: DateTime.now, payment_method: :abpay)
        ......
        render json: { code: 0, message: '支付成功', data: { } }, status: :ok and return
      end
    rescue => e
      render json: { code: 1, message: e, data: {} }, status: :ok and return
    end

Rails 7 里事务中有 return 会直接回滚

7.x 有一个选项 config.active_record.commit_transaction_on_non_local_return 可以控制是提交还是回滚,不过这个选项在 8.0 删除了。

You need to Sign in before reply, if you don't have an account, please Sign up first.