1

在 heroku 上调用该函数时出现此错误,无法弄清楚为什么会导致它损坏。如您所见,该功能是在 echos 表中创建一个值。奇怪的是,它在我的本地开发中运行良好。下面是我的heroku日志。任何想法???

在 13 毫秒内完成 500 内部服务器错误

ActiveRecord::RecordNotUnique (PG::Error: ERROR: 重复键值违反唯一约束“index_echos_on_user_id_and_yell_id”

插入“回声”(“created_at”、“is_yell”、“纬度”、“经度”、“updated_at”、“user_id”、“yell_id”)值(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

我很确定你正在制作一个非回调 sql,比如 update_all,这不会运行验证,所以你需要捕获错误并处理它

于 2014-06-17T18:17:57.840 回答
0

您的唯一性约束允许(user_id,yell_id,is_yell) (1,1,true)(1,1,false),而UNIQUE索引将拒绝这组行。我不知道哪个适合您的应用程序。

如果索引是正确的(任何组合最多一行user_id, yell_id),那么您应该更改您的验证:

validate_uniqueness_of :yell_id, :scope => :user_id

如果当前验证是正确的(允许使用相同的 yell 和非yell 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 回答
-1

如果您尝试避免在数据库更新查询之前保存重复项怎么办?我的意思是,在 Echo 模型上使用“validates_uniqueness_of”。

你在做这个吗?您可以将 Echo 模型的源代码粘贴到此处或要点中吗?

问候。

于 2012-04-14T00:05:15.670 回答