【发布时间】:2020-05-19 17:07:51
【问题描述】:
我过去曾在许多应用中使用过事务,它们总是按预期工作,但现在却不是。我想我只是在忽略一些明显的事情......
为什么要创建第一条记录?
ActiveRecord::Base.transaction do
Order.create!(order_id: 12)
raise 'breaking now'
Order.create!(order_id: 13)
end
我正在使用Rails 6 和Postgres 12
编辑:现在几乎没有任何效果......我很困惑。这也不起作用(第一条记录被更新)
ActiveRecord::Base.transaction do
order = Order.first
order.update(order_id: 777)
raise 'oops'
Order.create!(order_id: 13)
end
这个Order 模型正在使用不同的数据库,但我在使用主数据库的模型上尝试了相同的操作,并且效果相同。
class Order < ApplicationRecord
connects_to database: {reading: :orders, writing: :orders}
end
编辑:我也是从一个新的rails c 运行它,所以我的代码中没有嵌套事务,我没有在我的示例中显示。
【问题讨论】:
-
你正在连接到不同的数据库,所以你应该说
Order.transaction do ... end。 -
巧合的是,当大量 AR 被移动到单独的数据库时,我遇到了同样的事情。
-
那么如果我需要在事务中编辑 2 个模型(在同一个数据库中)会发生什么?我曾经能够将模型与
ActiveRecord::Base.transaction do混合使用
标签: ruby-on-rails ruby postgresql