Active Record:eager_load对结果执行意外的重复数据删除

时间:2015-07-27 12:13:46

标签: mysql ruby-on-rails-4 activerecord

我有一个活动记录查询,我根据另一个表和where子句的连接选择对象。结果可能包括多次相同的对象,这是期望的行为。

对于我的示例查询,我得到3个结果,其中2行是相同的。

我现在想要加载另一个关联。如果我使用includes,查询仍会生成3行,但生成的查询不是最理想的:

puts l.count # 3
l = l.includes(:name)
puts l.count #3
puts l.to_a.count #3

通过强制使用eager_load,生成的查询已经过优化,但不知怎的,我丢失了重复的行:

puts l.count # 3
l = l.eager_load(:name)
puts l.count # 2
puts l.to_a.count #2

奇怪的是,如果我手动执行生成的查询,我会得到3行。这意味着活动记录执行重复数据删除。为什么会发生这种情况并且有办法解决这个问题?

我在实验过程中注意到获得最佳查询(可能与之相关)的一点是l.countl.to_a.count并不总是产生相同的结果:

puts l.count # 3
l = l.joins(:name).includes(:name)
puts l.count # 3
puts l.to_a.count # 2

0 个答案:

没有答案