2012-04-30 5 views
1

私は2つのモデル、すなわちUserとInterestの間の多対多関係をかなり実行しています。PostgreSQLデータベースを使用してDatamapperで多対多の関連付けを更新する

私のデータベースを移行すると、interest_usersテーブルが作成され、user_idとinterest_idという2つのカラムが作成されます。

ユーザーレコードを作成すると、リンクテーブルの行が正常に作成されます。しかし、私がレコードを更新するときは、次のようになります。

ERROR: duplicate key value violates unique constraint "interest_users_pkey" 
DETAIL: Key (user_id, interest_id)=(1, 2) already exists. 

これは新しいユーザー関心のリンクが作成されないことを意味します。また、リンクを削除することもできません。

私はpostgresqlデータベースでレール3にdatamapperを使用しています。誰にも同じ問題がありましたか?

+0

更新のエラーメッセージには、問題がはっきりと示されていますか?既存のリンクと同じになるようにリンクを変更しようとしています。しかし、それらのリンクは一意的に定義されているので、あなたはそれを行うことはできません。リンクを削除しようとするとエラーメッセージが表示されますか? –

+0

私はそれを理解していますが、datamapperはまだ存在していない場合にのみリンクを作成しようとします。いずれかを削除しようとすると、エラーメッセージは表示されません。リンクテーブルに別の一意のキーIDが必要なのでしょうか?しかし、私はリンクモデルを使用せずにdatamapperでこれを行う方法がわからないので、可能ならばそれらを避けたいと思います... – Ger

答えて

1

UPDATEであり、フィールドuser_id、interest_idを変更(設定)しようとしている場合は、必ずそれを確認してください。これは、WHERE句が主キーフィールドを考慮していないためです。もう1つの可能性は、すでに存在するkey(user_id、interest_id)=(1,2)が孤立したデータである場合です。関係がある場合は:constraint => :destroyが有効になっていることを確認する必要があります。

関連する問題