2010-04-09 2 views
2

У меня есть модельMysql :: Error: Duplicate запись

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

Что такое параметры [: gift] в вашем примере? – shingara

+0

{: account_id => "122394471958",: giver_id => "50301499"} – Shaliko

ответ

3

Похоже, что таблица gifts имеет уникальный индекс для account_id и user_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 

Edit: Попробуйте добавить проверку присутствия на giver_id.

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

Я неправильно пишу моя ошибка Является ли это ActiveRecord :: StatementInvalid: Mysql :: Error: Дублирование запись '122394471958-50301499' для ключа 'index_gifts_on_account_id_and_giver_id' – Shaliko

+0

Я обновил свой ответ. –