我有一個list_users模型,其中包含用戶w列表的字段(id,list_id,user_id)。Rails + PostgreSQL,根據rails驗證規則創建重複記錄
在我的導軌模型列表中我有以下驗證,以防止重複。
validates_uniqueness_of :user_id, :scope => :list_id
然而飄飛重複記錄在其中,最終打破了很多東西DB的list_users表上創建...
=> [#<ListMember id: 37199, user_id: 1203713, list_id: 13651, created_at: "2012-06-04 20:02:11", updated_at: "2012-06-04 20:02:11">
=> [#<ListMember id: 37195, user_id: 1203713, list_id: 13651, created_at: "2012-06-04 20:01:40", updated_at: "2012-06-04 20:01:40">
有沒有人見過這個?謝謝
所以,基本上,這聽起來像鋼軌方法只是無能爲力地實施。如果只是在插入之前檢查,那麼總是會有可能的競爭條件。使用數據庫來處理這類事情 - 參見Dondi的答案。 –
如果Richard認爲Rails實現有問題並且在這種情況下允許爭用條件,那麼您可以覆蓋類中的「save」方法,啓動事務,以獨佔模式鎖定表list_users,然後再次驗證它。 (除了添加一個唯一的索引。) –
你不需要索引上的':unique => true',它是唯一的嗎? – srt32