我正在使用Rails。 4.0.5,Postgres 9.3和Ruby 2.1.2。我正在resque任务中运行一些代码,并在同一数据库的控制台中运行(我仔细检查了数据库和连接设置)
在循环中我基本上执行以下操作:
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')
我不确定是什么原因导致这种行为。
Field是一个包含40个字符的字符串,用作摘要。我错过了什么?它还具有独特的索引设置。
答案 0 :(得分:0)
试试这个
found = ContentItem.where(digest: entry.digest).limit(1).first
item = found ? found : ContentItem.create(item_params.merge({digest: entry.digest}))
对我来说,chaning create_with
和find_or_create_by
毫无意义