gpt4 book ai didi

ruby-on-rails - 为什么 ActiveRecord 在引发 StatementInvalid 错误后返回一个空数组?

转载 作者:行者123 更新时间:2023-11-29 13:27:23 24 4
gpt4 key购买 nike

specify 'Test' do
Foo.create

expect( Foo.count ).to eq 1

expect{ ActiveRecord::Base.connection.execute( 'invalid sql' )}
.to raise_error ActiveRecord::StatementInvalid

ActiveRecord::Base.connection.execute 'ROLLBACK'

expect( Foo.count ).to eq 1
end

这会导致以下故障:

Failure/Error: expect( Foo.count ).to eq 1

expected: 1
got: 0

出现StatementInvalid 错误后,App.all 返回一个空数组。因此,该错误似乎已经毒化了 future 的 AR DB 调用。

这个错误是从哪里来的?有没有办法通过重置 AR 连接来解决这个问题?

ActiveRecord 4.1.7 和 PostgreSQL。

最佳答案

通常,保存过程包含在事务中,最外层的保存(以防保存回调、关联等执行更多数据库更新)在提交时提交事务。

在测试中,这通常不会发生:事务用于防止个别测试更改数据库(rails 对此有内置支持,database_cleaner gem 也很流行)。因此,您的手动“回滚”语句正在回滚您对创建的调用。

关于ruby-on-rails - 为什么 ActiveRecord 在引发 StatementInvalid 错误后返回一个空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327433/

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