2010-04-09 62 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 2010-04-09 07:22:42

+0

{:ACCOUNT_ID => 「122394471958」,:giver_id => 「50301499」} – Shaliko 2010-04-09 07:50:12

回答

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

我錯了,我寫的錯誤 是被 的ActiveRecord :: StatementInvalid的:mysql ::錯誤:重複的項目 '122394471958-50301499' 關鍵'index_gifts_on_account_id_and_giver_id' – Shaliko 2010-04-09 07:59:38

+0

我已經更新了我的答案。 – 2010-04-09 08:25:29