今天,一位用户向我指出,我的Rails3应用程序中的一个报告的顶部记录数量与报告中的记录数量不符。
报告在顶部显示[object] .count,然后启动一个表并执行[object] .each以在表中创建行。为#each的每个循环创建一行;没有被跳过。然而,计数与行数不匹配。请注意,这是在我的开发实例中,因此没有创建新记录。
我把它调到了这个范围:
scope :by_reviewer, lambda {|reviewer| includes([:task]).joins(:work_assignments).where('work_assignments.reviewer = ?', reviewer).uniq }
这是uniq正在做的事情。 [object] .count报告数据库中的总计数(每个任务可能有多个work_assignment),但是当我循环时,我只得到唯一的。
这是一个错误,还是什么?我通过调用长度来修复它,它返回正确的数字([对象]中的数字)。
我知道#count总是回到数据库,但即便如此,为什么#uniq在发生这种情况时会被丢弃?如果对象是从这个范围创建的,然后#count想要再次查询,那么重新查询是否应该包含#uniq?