Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 使用PostgreSQL数据库更新Datamapper中的多对多关联_Ruby On Rails 3_Postgresql_Datamapper - Fatal编程技术网

Ruby on rails 3 使用PostgreSQL数据库更新Datamapper中的多对多关联

Ruby on rails 3 使用PostgreSQL数据库更新Datamapper中的多对多关联,ruby-on-rails-3,postgresql,datamapper,Ruby On Rails 3,Postgresql,Datamapper,我在两个模型之间有一个相当普通的多对多关系:用户和兴趣 迁移数据库时,将创建一个interest\u users表,其中包含两列:user\u id和interest\u id 创建用户记录很好,链接表中的行也可以很好地创建。但是,当我去更新记录时,我会得到以下信息: ERROR: duplicate key value violates unique constraint "interest_users_pkey" DETAIL: Key (user_id, interest_id)=(1

我在两个模型之间有一个相当普通的多对多关系:用户和兴趣

迁移数据库时,将创建一个interest\u users表,其中包含两列:user\u id和interest\u id

创建用户记录很好,链接表中的行也可以很好地创建。但是,当我去更新记录时,我会得到以下信息:

ERROR:  duplicate key value violates unique constraint "interest_users_pkey"
DETAIL:  Key (user_id, interest_id)=(1, 2) already exists.
这意味着不会创建新的用户兴趣链接。更重要的是,我似乎也不能删除链接


我正在使用Rails3上的datamapper和postgresql数据库。其他人也有同样的问题吗?

您应该确定这是否是一个更新,以及它是否试图更改(设置)字段user\u id、interest\u id。很多时候这是因为WHERE子句没有考虑主键字段。另一种可能性是,已经存在的键(user\u id,interest\u id)=(1,2)是孤立数据,如果是这样,您应该确保在关系中启用了一些
:constraint=>:destroy

您应该确定它是否是更新,以及它是否试图更改(设置)字段user\u id,很多时候这是因为WHERE子句没有考虑主键字段。另一种可能性是已经存在的键(用户id,兴趣id)=(1,2)是孤立数据,如果是这样,您应该确保在关系中启用了一些
:约束=>:销毁

更新的错误消息清楚地说明了问题,不是吗?您正在尝试更改链接,使其与现有链接相同。但是这些链接定义为唯一的,所以您不能这样做。当您尝试删除链接时,是否有任何错误消息?我理解这一点,但我假设datamapper只会在链接不存在时尝试创建链接。当我尝试删除其中一个时,没有错误消息。也许我需要在链接表上使用一个单独的唯一键id?但是我不确定如何在不使用链接模型的情况下在datamapper中实现这一点,如果可能的话,我希望避免这些问题……更新的错误消息清楚地说明了问题,不是吗?您正在尝试更改链接,使其与现有链接相同。但是这些链接定义为唯一的,所以您不能这样做。当您尝试删除链接时,是否有任何错误消息?我理解这一点,但我假设datamapper只会在链接不存在时尝试创建链接。当我尝试删除其中一个时,没有错误消息。也许我需要在链接表上使用一个单独的唯一键id?但是我不知道如何在datamapper中不使用链接模型就可以做到这一点,如果可能的话,我想避免使用链接模型。。。