首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord::RecordNotUnique (PG:: ERROR : ERROR)

ActiveRecord::RecordNotUnique (PG:: ERROR : ERROR)
EN

Stack Overflow用户
提问于 2012-04-13 23:48:29
回答 3查看 917关注 0票数 1

当调用heroku上的函数时,我得到了这个错误,并且不知道为什么它会坏掉。正如您所看到的,函数是将一个值创建到回显表中。奇怪的是,这对我当地的发展很有帮助。下面是我的heroku日志。知道吗?

在13 in内完成了500个内部服务器错误

ActiveRecord::RecordNotUnique (PG::Error: ERROR: constraint值违反唯一约束"index_echos_on_user_id_and_yell_id“)

在“回声”("created_at“、"is_yell”、“纬度”、“经度”、"updated_at“、"user_id”、"yell_id")中插入返回“id”的值($1、2、$3、$4、$5、$6、$7):

我试过validates_uniqueness_of,但还是没有用。

代码语言:javascript
复制
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
#
EN

回答 3

Stack Overflow用户

发布于 2012-12-04 01:53:56

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

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

代码语言:javascript
复制
validate_uniqueness_of :yell_id, :scope => :user_id

如果当前的验证是正确的(允许使用相同的user_id, yell_id同时使用叫喊和非呼号),那么您应该删除索引并创建一个新的索引:

代码语言:javascript
复制
remove_index :echo, [:user_id,:yell_id], :unique => true    
add_index :echo, [:user_id,:yell_id,:is_yell], :unique => true
票数 0
EN

Stack Overflow用户

发布于 2014-06-17 18:17:57

我确信您正在进行非回调sql,如update_all,这不会运行验证,因此您需要捕获错误并处理它

票数 0
EN

Stack Overflow用户

发布于 2012-04-14 00:05:15

如果在数据库更新查询之前试图避免保存重复项,怎么办?我是说,在回声模型上使用"validates_uniqueness_of“。

你要这么做吗?你能把Echo模型的源代码贴在这里还是用gist?

致以问候。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10149727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档