我正在使用ActiveRecord和Ruby(没有Rails)来连接SQLite3数据库。我从Web API获取一些数据,并使用find_or_create_by(some_hash)
将其存储在数据库中。只要some_hash
数据是唯一的,这就可以正常工作。如果数据库中已存在some_hash
,则find_or_create_by
方法失败并提供以下sql错误:SQLite3 :: ConstraintException:PRIMARY KEY必须是唯一的。
我希望find_or_create
方法首先检查我的数据库以查看数据是否已经存在,如果存在,那么它将不会创建重复的条目。但是,如果它没有找到数据,那么它只会创建一个新条目。那么,为什么我在数据库中已经存在some_hash
时会出现错误,就像它试图保存重复的条目一样?
如何解决此问题?
答案 0 :(得分:1)
我不知道为什么它会向你抛出这个错误,但是如果你想要你可以将方法分解为其成分:
A.create(some_hash) unless A.where(some_hash).present?
希望有所帮助
答案 1 :(得分:0)
这是有效的:
A.create(some_hash) unless A.where("id" => some_hash["id"]).exists?
出于某种原因,使用some_hash
查询数据库会导致误报,因此我必须明确指定id
。