2010-04-09 8 views
2

나는 모델을 가지고MySQL의 : 오류 : 중복 항목

class Gift < ActiveRecord::Base 
    validates_uniqueness_of :giver_id, :scope => :account_id 
end 

add_index(:gifts, [:account_id, :giver_id], :uniq => true) 

조치 "생산"모드에서

def create 
    @gift= Gift.new(params[:gift]) 

    if @gift.save 
    ... 
    else 
    ... 
    end 
end 

, 나는 가끔 오류

ActiveRecord::StatementInvalid: Mysql::Error: Duplicate entry '122394471958-50301499' for key 'index_gifts_on_account_id_and_user_id' 

무엇을 얻을 문제?

+0

예제에서 params [: gift] 값은 무엇입니까? – shingara

+0

{ACCOUNT_ID => "122394471958": giver_id => "50301499"} – Shaliko

답변

3

gifts 테이블에 account_iduser_id에 대한 고유 색인이있는 것 같습니다.

class Gift < ActiveRecord::Base 
    validates_uniqueness_of :giver_id, :scope => :account_id 
    validates_uniqueness_of :user_id, :scope => :account_id 
end 

그렇지 않으면 인덱스를 삭제 :이 인덱스를 필요로하는 경우

은 모델에 고유성 검사를 추가합니다.

DROP INDEX index_gifts_on_account_id_and_user_id ON gifts 

편집 : 시도가 giver_id의 존재 확인을 추가.

class Gift < ActiveRecord::Base 
    validates_presence_of :giver_id 
    validates_uniqueness_of :user_id, :scope => :account_id 
end 
+0

I 나는 잘못 인가 내 오류 액티브 :: StatementInvalid입니다 쓰기 : MySQL의 : 오류 : 키 입력 '122394471958-50301499을'복제 'index_gifts_on_account_id_and_giver_id' – Shaliko

+0

답변을 업데이트했습니다. –