2014-05-12 54 views
0

我正在使用Rails。 4.0.5,Postgres 9.3和Ruby 2.1.2。我在resque任務,並針對同一數據庫控制檯運行的一些代碼(我雙重檢查數據庫和連接設置)rails find_or_create_by找不到存在的記錄

在循環中我基本上執行以下命令:

item = ContentItem.create_with(item_params).find_or_create_by(digest: entry.digest)

爲19個項目,它工作正常,如果我重新運行代碼,並執行查找或創建所需..但他們中的一個不工作。它沒有找到它,並創建因爲我的項目

@messages={:digest=>["has already been taken"]}

做好對有關項目的下列得到一個錯誤,並細返回實際項目的每一個呼叫失敗...

ContentItem.find_by_digest('e9e61c790f0fd63d367f6b2c210cb5d1ed00aefd')

我不知道什麼可能導致行爲。

字段是一個40個字符的字符串,並用作摘要。我錯過了什麼?它也有一個獨特的索引設置。

回答

0

試試這個

found = ContentItem.where(digest: entry.digest).limit(1).first 
item = found ? found : ContentItem.create(item_params.merge({digest: entry.digest})) 

給我,chaning create_withfind_or_create_by是沒有意義的

+0

讓我試試。我想知道如果這是因爲我有太多插入一次 – user3622093

相關問題