这是错误的代码片段。
transaction do
Person.having_email(some_email).find_each(:conditions => ["people.identifier != ? OR people.identifier IS NULL", identifier]) do |person|
if person.identifier?
raise "Person is associated with a different identifier"
else
duplicate_entry = Person.find_by_identifier_and_company_id(identifier, person.company_id)
person.update_attribute(:identifier, identifier) if duplicate_entry.nil?
end
end
end
having_email
是为 Person 类定义的 named_scope。
我面临的问题是,即使数据库中存在有效记录,找到可能重复条目的表达式似乎总是返回 nil。当我使用 RubyMine 调试器评估相同的表达式时,它会返回正确的对象。
进一步反省,似乎 rails 没有对 duplicate_entry 评估语句触发任何查询(日志中没有这样的查询)。在用find_each
正常find(:all, ...).each
呼叫替换呼叫时,事情似乎工作正常(重复条目检索查询也存在于日志中)。
我一直无法弄清楚可能导致这种情况的原因。有任何想法吗?