如何在加载灯具之后、创建保存点之前执行 SQL 语句?
我们有一个模型,它使用另一个模型的表上的 auto_increment 从另一个模型的 ID 中获取序列号。每当数据库服务器重新启动时,该值就会设置为零,因此序列号会重置。为了解决这个问题,在 after_initialize 块中,我们将 auto_increment 值设置为最大序列值加一,一切都很好。
然而,在测试中,块在加载装置之前运行,因此最大值返回为零。然后,当测试运行时,该值太低,因此测试失败。
一种可能的解决方案是更新设置块中的值,但更改表会提交当前事务,因此测试结束时的回滚会失败。
如何在加载灯具后、创建保存点之前更改 AUTO_INCRMENT 值?
We have a model which gets a sequence number from the ID of another model, using auto_increment on the other model's table. That value gets set to zero whenever the db server is restarted, so the sequence numbers reset. To work around this, in an after_initialize block, we set the auto_increment value to the maximum sequence value plus one, and all is well.
However, in the tests, the block runs before fixtures are loaded, so the maximum comes back as nil. Then when the tests run, the value is too low and so the tests fail.
One possible solution is to update the value in a setup block, but altering the table commits the current transaction and so the rollback at the end of the test fails.
How do I alter the AUTO_INCREMENT value after fixtures are loaded, but before the savepoint is created?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最终找到了一种方法,通过在 test_helper.rb 末尾修补
load_fixtures
来实现此目的:Finally found a way to do this by monkey patching
load_fixtures
at the end of test_helper.rb: