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
有几种选择:
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
简单地返回零。但是,是的,这是一条路要走。如果您不希望有那么多重复项,您甚至可以跳过验证,只处理异常(因为您必须处理它们)。