gpt4 book ai didi

activerecord - Rails 事务不回滚

转载 作者:行者123 更新时间:2023-12-04 01:54:19 24 4
gpt4 key购买 nike

为什么即使创建一个事务也不会回滚!失败?
如果这有什么不同,它在 Controller 中。

def process_photos(photos)
ActiveRecord::Base.transaction do
begin
photos.each do |photo|
Photo.create!(creator_user: @user, buyer: @buyer, url: photo['url'])
end
rescue
raise ActiveRecord::Rollback
end
end
end

我明确地发送了一个带有一些不良记录的数组。好的正在被创建,而坏的则没有,但即使一个失败,我也需要整个事情来回滚。

这是我的 rspec 测试(传递照片的 json 数组)并且它正在增加。
expect { post :create, json }.not_to change(Photo, :count)

最佳答案

这只是 rspec 的一个测试问题,因为您已经在测试中的事务中执行。这与讨论的嵌套事务问题相同 here .
为了让测试工作,你需要添加......

requires_new: true

到交易调用。

这修复了测试。
def process_photos(photos)
ActiveRecord::Base.transaction(requires_new: true) do
begin
photos.each do |photo|
Photo.create!(creator_user: @user, buyer: @buyer, url: photo['url'])
end
rescue
raise ActiveRecord::Rollback
end
end
end

重要提示:只有当您的数据库引擎支持回滚时,回滚才会起作用!例如,带有 MyISAM 的 MySQL 不支持事务,而带有 Inno DB 的 MySQL 支持它们。

关于activerecord - Rails 事务不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21340686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com