正在写入数据库的重复记录

时间:2018-04-17 16:28:01

标签: ruby-on-rails database postgresql duplicates

将重复记录写入数据库的原因可能是什么?在我的创建操作中,我首先检查是否存在具有唯一标识符的记录,如果存在则更新它,否则创建新记录。但是现在在我的数据库中,我看到的重复记录不仅相隔几秒或几分钟,而且相隔甚至几天或几个月。可能导致这种情况的原因是什么?

def create
  record_uid = params.delete(:uid)

  if record_uid.present?
    record = Record.find_by(uid: record_uid)

    unless record.present?
      redirect_to error_path and return
    end
  else
    record = Record.new
  end

  record.attributes = params
  record.save

  redirect_to record
end

1 个答案:

答案 0 :(得分:1)

有几种选择:

  1. 创建db-level uniq约束。这是一个可以帮助您的SO answer。根据您的代码,我建议为uid列创建uniq btree索引。
  2. 使用ActiveModel验证创建模型级uniq约束:

    class Record < ActiveRecord::Base
      validates :uid, uniqueness: true
    end
    
  3. 第一个选项会引发ActiveRecord::RecordNotUnique而第二个record.save会返回false所以你需要处理这个方式