3

我有幾個has_and_belongs_to_many關聯,我還使用關聯中的uniq選項來避免與重複鍵有關的MySQL錯誤。我協會是這樣的:has_and_belongs_to_many和關聯表上的唯一索引生成「重複項」失敗

has_and_belongs_to_many :people, :uniq => true 

我添加的指標是我添加使用分主鍵:

add_index :table_name, [:key_1, :key_2], :unique => true 

在ASSOCATION的兩側。但是當我嘗試關聯一個對象兩次時,我的應用程序拋出了由MySQL生成的Mysql2::Error: Duplicate entry '1-9' for key...錯誤。有沒有一種聰明的方式來處理這個問題?

我想過幾種可能的解決方案,但並不聰明。我想通過使用:insert_sql選項來手動更改INSERT查詢,但是對於20個關聯表來說,這將花費很多工作量。有沒有更好的方法來處理這個問題?

回答

3

uniq選項不會非常難以防止重複被添加 - 如果關聯被加載,它將檢查對象是否已經在那裏,但它不會加載關聯只是爲了檢查。

最簡單的事情可能是搶救ActiveRecord::RecordNonUnique,並用它適當地處理 - 不管你的紅寶石級檢查如​​何小心在那裏總是會成爲其中得到由數據庫陷入競爭條件的機會

+1

我怎麼能在一箇中心位置做這件事,以保持乾爽?我不想在20個不同的地方重置此錯誤 – davidb 2011-12-27 11:57:39

+0

爲此問題打開新線程=> http://stackoverflow.com/questions/8644577/how-to-rescue-exception-central-and-dry – davidb 2011-12-27 12:22:32