2010-04-09 43 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