2012-04-13 7 views
1

J'ai cette erreur quand j'appelle la fonction sur heroku et je n'arrive pas à comprendre pourquoi elle est cassée Comme vous pouvez le voir, la fonction est de créer une valeur en échos table. Bizarrement, il fonctionne très bien sur mon développement local. Ci-dessous mon journal Heroku. Toute idée ???ActiveRecord :: RecordNotUnique (PG :: Erreur: ERREUR

Completed 500 Internal Server Error in 13ms

ActiveRecord::RecordNotUnique (PG::Error: ERROR: duplicate key value violates unique constraint "index_echos_on_user_id_and_yell_id"

INSERT INTO "echos" ("created_at", "is_yell", "latitude", "longitude", "updated_at", "user_id", "yell_id") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING " id"):


J'ai essayé validates_uniqueness_of mais il ne fonctionne toujours pas.

class Echo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :yell 

    attr_accessible :user_id, :yell_id, :longitude, :latitude, :is_yell 
    validates_uniqueness_of :is_yell, :scope => [:yell_id, :user_id] 
    validates :user_id, :yell_id, :presence => true 
end 

# == Schema Information 
# 
# Table name: echos 
# 
# id   :integer(4)  not null, primary key 
# is_yell :boolean(1) 
# user_id :integer 
# yell_id :integer 
# created_at :datetime 
# updated_at :datetime 
# 

Répondre

-1

Et si vous essayez d'éviter d'enregistrer des doublons avant la requête de mise à jour de base de données? Je veux dire, utilisez "validates_uniqueness_of" sur le modèle Echo.

Êtes-vous en train de faire cela? pourriez-vous coller le code source du modèle Echo ici ou dans l'essentiel?

Cordialement.

+0

J'ai mis à jour mon modèle d'écho avec validates_uniqueness_of mais le même problème. Courir bien sur le dév mais cassé sur heroku prod – user1330487

0

Votre contrainte d'unicité permet (user_id,yell_id,is_yell)(1,1,true) et (1,1,false), tandis que l'index UNIQUE rejetterait cet ensemble de lignes. Je ne sais pas ce qui est correct pour votre application.

Si l'indice est propre (au plus une ligne pour toute user_id, yell_id combinaison), alors vous devriez changer votre validation:

validate_uniqueness_of :yell_id, :scope => :user_id 

Si la validation en cours est correcte (permettant à la fois pousser des cris et non criez avec la même user_id, yell_id), alors vous devez supprimer l'index et créer un nouveau:

remove_index :echo, [:user_id,:yell_id], :unique => true  
add_index :echo, [:user_id,:yell_id,:is_yell], :unique => true 
0

im Préty que vous faites un sql non de rappel, comme update_all, cela ne fonctionnera pas les validations, vous devez attraper l'erreur et la gérer

Questions connexes