2014-05-12 114 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

相关问题