find_or_create_by导致SQLite3 PRIMARY KEY必须是唯一错误

时间:2014-01-30 09:06:22

标签: ruby activerecord sqlite

我正在使用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时会出现错误,就像它试图保存重复的条目一样?

如何解决此问题?

2 个答案:

答案 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