我发现了一些我无法理解的东西。鉴于以下内容:
class Parent < ActiveRecord::Base
has_many :children
end
Class Child < ActiveRecord::Base
belongs_to :parent
end
现在,让我们说我会取得所有父母,我想知道每个父母有多少孩子,我会做的事情如下:
>>> Parent.all(:include => :children).each { |parent| print parent.children.count }
Parent Load ...
Child Load ...
...
(0.2ms) SELECT COUNT(*) FROM "children" WHERE "children"."parent_id" = 46
...
即使我在查询中包含上述子项,它也会为每个父项生成一个查询。如果我给孩子们打电话给.to_a,会有什么问题:
>>> Parent.all(:include => :children).each { |parent| print parent.children.to_a.count }
这很奇怪,因为如果我取了一类孩子,它会告诉我“数组”:
>>> parent.children.class
Array
如果我在调用“to_a”后检查课程,我再次有一个数组
>>> parent.children.to_a.class
Array
为什么伯爵的表现如此不同?
答案 0 :(得分:1)
尝试.size而不是.count。 ActiveRecord执行SQL计数,而不是确定它已经获取的集合的大小。