如何在Rails中使用外键约束的数据库中使用测试和夹具?

时间:2014-09-02 16:25:58

标签: ruby-on-rails foreign-keys fixtures minitest foreigner

我正在使用Rails 4.1和PostgreSQL,我使用foreigner gem来创建外键约束。但我在fixtures时遇到了一些问题。

当我跑步时:

spring rake test

我收到如下错误:

ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR:  update or delete on table "pessoas" violates foreign key constraint "pacientes_pessoa_id_fk" on table "pacientes"
DETAIL:  Key (id)=(980190962) is still referenced from table "pacientes".
: DELETE FROM "pessoas"

我找到了一种解决方法:重新创建数据库:

RAILS_ENV=test spring rake db:reset && spring rake test

当我尝试使用rake db:fixture:load使用灯具为开发数据库播种时,我遇到了一些错误。

我已经尝试更改test_helper.rb中的灯具装载顺序,但这还不够。

有人知道如何解决这个问题吗?我在网上搜索了很多,但没有找到解决方案。

1 个答案:

答案 0 :(得分:2)

所以,我知道这确实有效,但我不能说这是一个实际的正确解决方法。

您需要让用户成为SUPERUSER。

在我使用Cloud 9的情况下,我登录的用户是“ubuntu”。

我输入sudo -u postgres psql(实际上sudo两次让C9正确访问)并输入:

ALTER USER ubuntu SUPERUSER;

退出,它会起作用。

如果运行tail log / test.rb,则在运行集成测试时可能会看到PG :: InsufficientPrivlege:ERROR,因此用户没有足够的权限。你不想在制作中这样做,但我的作品是在Heroku上,所以我很好。