Rails 2.3.4中的find_each方法中的问题

时间:2012-10-31 09:58:35

标签: ruby-on-rails activerecord

这是错误的代码段。

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调用时,事情似乎工作正常(重复条目检索查询也存在于日志中)。

我无法理解可能导致此问题的原因。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

问题是find_each和find_in_batches通过设置a来工作   with_scope块。因此,如果你需要做任何其他发现   同一型号,适用范围。

此问题的根本原因以及有效的解决方法in this blog post

已得到很好的解释