理解できないことに気がつきました。以下を考えると:
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
カウントの演技はなぜこんなに違うのですか?