【问题标题】:ActiveRecord::RecordNotUnique (PG::Error: ERRORActiveRecord::RecordNotUnique (PG::Error: ERROR
【发布时间】:2012-04-13 23:48:29
【问题描述】:

我在 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
#

【问题讨论】:

    标签: ruby-on-rails activerecord heroku


    【解决方案1】:

    您的唯一性约束允许(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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        你在做这个吗?你能把 Echo 模型的源代码贴在这里或 gist 中吗?

        问候。

        【讨论】:

        • 我用 validates_uniqueness_of 更新了我的回声模型,但同样的问题。在 dev 上运行良好,但在 heroku prod 上坏了
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 2012-12-16
        相关资源
        最近更新 更多