我注意到一些我无法理解的东西。鉴于以下情况:
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
为什么伯爵演技如此不同?