1

herokuで関数を呼び出すとこのエラーが発生し、なぜそれが壊れたのか理解できません。ご覧のとおり、関数はエコーテーブルに値を作成することです。奇妙なことに、それは私のローカル開発でうまく機能します。以下は私のherokuログです。何か案が???

13ミリ秒で500の内部サーバーエラーを完了しました

ActiveRecord :: RecordNotUnique(PG :: Error:ERROR:重複するキー値が一意の制約「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) "id"を返す):


試しvalidates_uniqueness_ofましたが、まだうまくいきませんでした。

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
#
4

3 に答える 3

0

一意性制約は と を許可(user_id,yell_id,is_yell) (1,1,true)しますが(1,1,false)UNIQUEインデックスはこの行のセットを拒否します。あなたのアプリケーションにどちらが正しいかわかりません。

インデックスが適切な場合 (任意のuser_id, yell_id組み合わせで最大 1 行)、検証を変更する必要があります。

validate_uniqueness_of :yell_id, :scope => :user_id

現在の検証が適切である場合 (同じuser_id, yell_id.

remove_index :echo, [:user_id,:yell_id], :unique => true    
add_index :echo, [:user_id,:yell_id,:is_yell], :unique => true
于 2012-12-04T01:53:56.690 に答える
0

update_all のような非コールバック SQL を作成していることは確かです。これは検証を実行しないため、エラーをキャッチして処理する必要があります。

于 2014-06-17T18:17:57.840 に答える
-1

データベース更新クエリの前に重複保存を回避しようとするとどうなりますか? つまり、Echo モデルで「validates_uniqueness_of」を使用します。

あなたはこれをやっていますか?Echo モデルのソース コードをここまたは要点に貼り付けていただけますか?

よろしく。

于 2012-04-14T00:05:15.670 に答える