Насколько я понимаю, count
и length
должны возвращать одинаковое число для массивов Ruby. Поэтому я не могу понять, что здесь происходит (по умолчанию FactoryGirl настроена на создание - сохранение в базе данных):
f = Factory(:family) # Also creates one dependent member
f.members.count # => 1
f.members.length # => 1
m = Factory(:member, :family=>f, :first_name=>'Sam') #Create a 2nd family member
f.members.count # => 2
f.members.length # => 1
puts f.members # prints a single member, the one created in the first step
f.members.class # => Array
f.reload
[ Now count == length = 2, and puts f.members prints both members]
Я смутно понимаю, почему необходимо перезагрузить f, хотя я ожидал, что f.members
будет включать поиск в базе данных для членов с family_id=f.id
и будет возвращать всех членов, даже если f устарела.
Но как счет может отличаться от длины? f.members - это массив, но метод count
где-то переопределяется или Array.count действительно возвращает результат, отличный от Array.length? Не насущная проблема, просто загадка, которая может указывать на основной недостаток моего понимания Ruby или Rails.