如何强制ActiveRecord始终从数据库插入,更新,删除和检索?

时间:2013-02-01 04:47:30

标签: ruby activerecord

我们使用ActiveRecord独立(不是Rails应用程序的一部分)来使用RSpec进行单元测试。我们正在测试数据库上的一个触发器,它将行插入到审计表中。

课程是:

文件夹有很多文件

文件夹有很多FileAudit

事件的顺序如下:

  • 创建文件夹
  • START TEST ONE
  • 创建文件
  • 做一些文件
  • 获取Folder.file_audits
  • 检查相关的FileAudit记录
  • 销毁文件
  • 销毁FileAudits
  • END TEST ONE
  • START TEST TWO
  • 创建文件
  • 做一些其他的东西到文件
  • 获取Folder.file_audits
  • 检查相关的FileAudit记录
  • 销毁文件
  • 销毁FileAudits
  • END TEST TWO
  • 销毁文件夹

来自测试一的FileAudits正在被破坏,但不是来自测试二。 ActiveRecord似乎认为在第二次测试结束时该表中没有新的东西要删除。

我可以使用Folder.file_audits(true)来刷新缓存,但我宁愿禁用任何和所有类型的缓存,让ActiveRecord执行我告诉它的操作,而不是执行它认为最好的操作。

我还需要在File上将一个标志设置为相同的值,并验证触发器是否未创建审计记录。当我将标志设置为不同的值时,我可以在日志中看到更新语句,但是当我将其设置为相同的值并保存时,日志中没有更新。

我确信网站上的缓存等等都很好,但我们并没有这样做。我们需要它始终从数据库中获取所有记录,并始终更新和删除无论如何。我们怎么能这样做?

我们正在使用ActiveRecord 3.1.3。

由于

2 个答案:

答案 0 :(得分:0)

我最初的猜测是,你正在其中一项测试中处理事务。如果是的话,你实际上是在消除包装单元测试本身的外部事务,在这种情况下导致单元测试清理无法回滚。

答案 1 :(得分:0)

我不知道这是否适用于您,但过去我遇到model.save而不是model.save!时遇到了问题。有时我会在保存时遇到验证错误,但如果没有爆炸,验证错误不会引发实际异常,所以我永远不知道保存不成功。