当调用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,但还是没有用。
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
#发布于 2012-12-04 01:53:56
您的唯一性约束允许(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如果当前的验证是正确的(允许使用相同的user_id, yell_id同时使用叫喊和非呼号),那么您应该删除索引并创建一个新的索引:
remove_index :echo, [:user_id,:yell_id], :unique => true
add_index :echo, [:user_id,:yell_id,:is_yell], :unique => true发布于 2014-06-17 18:17:57
我确信您正在进行非回调sql,如update_all,这不会运行验证,因此您需要捕获错误并处理它
发布于 2012-04-14 00:05:15
如果在数据库更新查询之前试图避免保存重复项,怎么办?我是说,在回声模型上使用"validates_uniqueness_of“。
你要这么做吗?你能把Echo模型的源代码贴在这里还是用gist?
致以问候。
https://stackoverflow.com/questions/10149727
复制相似问题