2014-01-30 26 views
0

我使用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_by導致SQLite3 PRIMARY KEY必須是唯一的錯誤

我預計find_or_create方法首先檢查我的數據庫,看看數據是否已經存在,如果有,那麼它不會創建一個重複的條目。但是,如果它沒有找到數據,那麼只有它會創建一個新條目。那麼,爲什麼當some_hash已經存在於數據庫中時就會出現這樣的錯誤,就像它試圖保存重複條目一樣?

我該如何解決這個問題?

回答

0

這裏是什麼工作:

A.create(some_hash) unless A.where("id" => some_hash["id"]).exists? 

出於某種原因,與some_hash查詢數據庫造成誤報,因此我必須明確指定只id

1

我不知道爲什麼它在你拋出的錯誤,但如果你想你可以打破方法upinto它的成分:

A.create(some_hash) unless A.where(some_hash).present? 

希望幫助

+0

試過了但它給出了同樣的錯誤 – HM1

相關問題