Ruby on rails 正在将重复记录写入数据库

Ruby on rails 正在将重复记录写入数据库,ruby-on-rails,database,postgresql,duplicates,Ruby On Rails,Database,Postgresql,Duplicates,重复记录间隔几天写入数据库的原因可能是什么?在我的创建操作中,我首先检查具有唯一标识符的记录是否存在,如果存在则更新它,否则创建新记录。但现在在我的数据库中,我看到了重复的记录,它们不仅相隔几秒钟或几分钟,甚至几天或几个月。这可能是什么原因造成的 def create record_uid = params.delete(:uid) if record_uid.present? record = Record.find_by(uid: record_uid) unle

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

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

有几种选择:

  • 创建db级uniq约束。这是一个可以帮助你的方法。根据您的代码,我建议为uid列创建UNIQBTREE索引
  • 使用
    ActiveModel
    验证创建模型级uniq约束:

    class Record < ActiveRecord::Base
      validates :uid, uniqueness: true
    end
    
    class记录

  • 第一个选项将引发
    ActiveRecord::RecordNotUnique
    ,第二个选项将引发
    record。save
    将返回
    false
    ,因此您需要处理这两种情况

    您必须发布更多代码以帮助我们。是否有部分代码跳过验证?db级别约束?几乎可以是任何内容。模型或模型中没有验证数据库中的约束。create操作中的create或update检查是否足够?什么能解释相隔几天的重复记录?有什么东西能通过GET意外调用
    create
    ?或者它只能作为帖子使用?第一个帖子将引发一个
    ActiveRecord::RecordNotUnique
    ,而不是从
    save
    简单地返回零。但是,是的,这是一条路要走。如果您不希望有那么多重复项,您甚至可以跳过验证,只处理异常(因为您必须处理它们)。