5

我正在使用带有单个“帐户”表的 STI 模型来保存用户和技术人员的信息(即用户 < 帐户,技术人员 < 帐户)。从功能的角度来看,一切都有效,但是在运行单元测试时事情会爆炸:

... 8)错误:test_the_truth(UserTest):ActiveRecord::StatementInvalid:PGError:错误:关系“技术人员”不存在:从“技术人员”中删除......

本质上,标准框架不承认 Technicians 和 Users 表(或 PostgreSQL 称之为“关系”)不存在,事实上,应该将其别名为 Accounts。

有任何想法吗?我对 RoR 比较陌生,我不知道如何解决这个问题而不把 STI 一起撕掉。

4

3 回答 3

12

原来,问题是由于存在:

./test/fixtures/technicians.yml ./test/fixtures/users.yml

这是有道理的,因为框架希望能够将数据插入到类似命名的表中。

于 2009-03-15T01:14:45.267 回答
2

我有一个类似的问题,通过删除子模型的 YAML 文件得到了解决。本质上,rails 正在查看 /test/fixtures/ 中创建的夹具,并尝试清空每个表,以便它可以为您重新加载它们。

在我的例子中,我运行了脚本/生成模型命令,它会自动创建一个新的夹具。然后我将模型更改为从正确的父类继承。好吧,由于夹具仍然存在,rails 试图在加载夹具之前从子项中删除。

如果您确实需要预加载数据,您应该使用父模型夹具并将类型字段设置为正确的模型名称。

于 2010-04-26T15:54:12.273 回答
0
  • 您是否确保您的帐户表包含“类型”列?您需要一个才能使 STI 发挥作用。
  • 实际上,我在一个名为“type”的列上遇到了一些数据库兼容性问题,偶尔会切换到“kind”来缓解这种情况。这可能是问题所在;尝试在基类(帐户)中设置 self.inheritance_column = "kind" 看看是否有帮助。
于 2009-03-14T18:56:32.603 回答