1

我注意到一些我无法理解的东西。鉴于以下情况:

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

为什么伯爵演技如此不同?

4

1 回答 1

1

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

于 2013-01-24T19:00:05.437 回答