ActiveRecord:has_many关系中的对象计数

时间:2013-01-24 13:50:45

标签: activerecord count has-many relation

我发现了一些我无法理解的东西。鉴于以下内容:

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

为什么伯爵的表现如此不同?

1 个答案:

答案 0 :(得分:1)

尝试.size而不是.count。 ActiveRecord执行SQL计数,而不是确定它已经获取的集合的大小。