2012-04-30 43 views
1

我有兩個模型之間的工廠多對多關係的相當運行:用戶和興趣。使用PostgreSQL數據庫更新Datamapper中的多對多關聯

當我遷移我的數據庫時,會創建一個interest_users表,其中包含兩列:user_id和interest_id。

創建用戶記錄沒問題,鏈接表中的行得到良好創建。但是,當我去更新記錄時,我得到以下內容:

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

這意味着不會創建新的用戶興趣鏈接。還有什麼我似乎無法刪除鏈接。

我在rails 3上用postgresql數據庫使用datamapper。有沒有其他人有同樣的問題?

+0

更新的錯誤消息明確指出問題,不是嗎?您正在嘗試更改鏈接,以便它與現有鏈接相同。但是這些鏈接被定義爲獨特的,所以你不能這樣做。當您嘗試刪除鏈接時出現任何錯誤消息? –

+0

我明白,但我會假設datamapper只會嘗試創建鏈接,如果它不存在。當我嘗試刪除時沒有錯誤消息。也許我需要一個單獨的鏈接表上唯一的密鑰ID?但我不確定如何在不使用鏈接模型的情況下在datamapper中執行此操作,並且我希望儘可能避免這些操作。 – Ger

回答

1

您應該確定它是否是UPDATE,並且它是否嘗試更改(設置)字段user_id,interest_id。很多時候這是因爲WHERE子句沒有考慮主鍵字段。另一種可能性是,已經存在的密鑰(user_id,interest_id)=(1,2)是一個孤兒數據,如果是這樣的話,你應該確保你在關係中啓用了一些:constraint => :destroy